Detecting a Loop in Linked List
Procedure to check if a given list has a loop using Floyd's Cycle Finding Algorithm.
Procedure :
Take two pointers : slow and fast
Move the slow pointer by 1 node each time and fast pointer by 2 nodes each time.
Perform the above step until either of the pointer become NULL or the next of fast becomes NULL.
Check if both the pointers are same. If so, the linked list has a loop. Else, it doesn't.
int isLoop(struct node *ptr) {
// Two pointers to check for loop
struct node *slow = ptr;
struct node *fast = ptr;
while (slow && fast && fast -> next) {
// Move slow by one step
slow = slow -> next;
// Move fast by two steps
fast = fast -> next -> next;
// Check if the pointers are same
if (slow == fast) {
return 1;
}
}
return 0;
}
Contributed by Nitin Ranganath
Last updated
Was this helpful?