Given a circular linked list, implement an algorithm which returns node at the begin-
ning of the loop.
DEFINITION
Circular linked list: A (corrupt) linked list in which a node’s next pointer points to an
earlier node, so as to make a loop in the linked list.
EXAMPLE
Input: A -> B -> C -> D -> E -> C [the same C as earlier]
Output: C
So, we now know the following:
1. Head is k nodes from LoopStart (by definition).2. MeetingPoint for n1 and n2 is k nodes from LoopStart (as shown above).
struct LinkNode
{
LinkNode * next;
int value;
}
LinkNode * findLoop(LinkNode * head)
{
if (head == NULL)
return NULL;
LinkNode * slow = head->next;
if (slow == NULL)
return NULL;
LinkNode * fast = head->next->next;
while (fast != slow)
{
fast = fast->next;
if (fast == NULL)
return NULL;
fast = fast->next;
slow = slow->next;
}
LinkNode * start = head;
while (start != slow)
{
start = start->next;
slow = slow->next;
}
return fast;
}