Remove loop in Linked List Java
- Get link
- X
- Other Apps
PROGRAM TO DETECT AND REMOVE LOOP IN A LINKED LIST 2
class
LinkedList {
static
Node head;
static
class
Node {
int
data;
Node next;
Node(
int
d)
{
data = d;
next =
null
;
}
}
// Function that detects loop in the list
int
detectAndRemoveLoop(Node node)
{
Node slow = node, fast = node;
while
(slow !=
null
&& fast !=
null
&& fast.next !=
null
) {
slow = slow.next;
fast = fast.next.next;
// If slow and fast meet at same point then loop
// is present
if
(slow == fast) {
removeLoop(slow, node);
return
1
;
}
}
return
0
;
}
// Function to remove loop
void
removeLoop(Node loop, Node curr)
{
Node ptr1 =
null
, ptr2 =
null
;
/* Set a pointer to the beginning of the Linked List
and move it one by one to find the first node which
is part of the Linked List */
ptr1 = curr;
while
(
1
==
1
) {
/* Now start a pointer from loop_node and check
if it ever reaches ptr2 */
ptr2 = loop;
while
(ptr2.next != loop && ptr2.next != ptr1) {
ptr2 = ptr2.next;
}
/* If ptr2 reahced ptr1 then there is a loop. So
break the loop */
if
(ptr2.next == ptr1) {
break
;
}
/* If ptr2 did't reach ptr1 then try the next
* node after ptr1 */
ptr1 = ptr1.next;
}
/* After the end of loop ptr2 is the last node of
the loop. So make next of ptr2 as NULL */
ptr2.next =
null
;
}
// Function to print the linked list
void
printList(Node node)
{
while
(node !=
null
) {
System.out.print(node.data +
" "
);
node = node.next;
}
}
// Driver code
public
static
void
main(String[] args)
{
LinkedList list =
new
LinkedList();
list.head =
new
Node(
50
);
list.head.next =
new
Node(
20
);
list.head.next.next =
new
Node(
15
);
list.head.next.next.next =
new
Node(
4
);
list.head.next.next.next.next =
new
Node(
10
);
// Creating a loop for testing
head.next.next.next.next.next = head.next.next;
list.detectAndRemoveLoop(head);
System.out.println(
"Linked List after removing loop : "
);
list.printList(head);
}
}
OUTPUT
Linked List after removing loop 50 20 15 4 10
- Get link
- X
- Other Apps
Comments
Post a Comment