-
Notifications
You must be signed in to change notification settings - Fork 25
/
Split_a_Circular_Linked_List_into_two_halves.java
126 lines (104 loc) · 2.45 KB
/
Split_a_Circular_Linked_List_into_two_halves.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// { Driver Code Starts
import java.util.*;
class Node {
int data;
Node next;
Node(int d) {
data = d;
next = null;
}
}
public class circular_LinkedList {
Node head, head1, head2; // head of lisl
// Node last = null;
Node last = null;
/* Linked list Node */
/* Utility functions */
/* Inserts a new Node at front of the list. */
public void addToTheLast(Node node) {
if (head == null) {
head = node;
} else {
Node temp = head;
while (temp.next != null)
temp = temp.next;
temp.next = node;
}
}
/* Function to print linked list */
void printList(Node node) {
Node temp = node;
if (node != null) {
do {
System.out.print(temp.data + " ");
temp = temp.next;
} while (temp != node);
}
System.out.println();
}
void circular() {
last = head;
while (last.next != null)
last = last.next;
last.next = head;
// System.out.println(last);
}
/* Drier program to test above functions */
public static void main(String args[]) {
/*
* Constructed Linked List is 1->2->3->4->5->6->
* 7->8->8->9->null
*/
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
while (t > 0) {
int n = sc.nextInt();
circular_LinkedList llist = new circular_LinkedList();
int a1 = sc.nextInt();
Node head = new Node(a1);
llist.addToTheLast(head);
for (int i = 1; i < n; i++) {
int a = sc.nextInt();
llist.addToTheLast(new Node(a));
}
/*
* Node x = head;
* while(x!=null)
* {
* System.out.print(x.data+" ");
* x = x.next;
* }
*/
llist.circular();
// int k=sc.nextInt();
gfg g = new gfg();
// System.out.println(g.getCount(llist));
g.splitList(llist);
llist.printList(llist.head1);
llist.printList(llist.head2);
// llist.printList();
// llist.head = llist.reverse(llist.head);
// llist.printList();
t--;
}
}
}
class gfg {
void splitList(circular_LinkedList list) {
Node head = list.head;
list.head1 = head;
Node slow = head;
Node fast = head.next;
while (fast != head && fast.next != head) {
fast = fast.next.next;
slow = slow.next;
}
list.head2 = slow.next;
slow.next = list.head1;
Node curr = list.head2;
while (curr.next != head) {
curr = curr.next;
}
curr.next = list.head2;
}
}