2.5 Given a circular linked list, implement an algorithm which returns node at the beginning 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
Node findCircle(Node head)
{
Node p1 = head;
Node p2 = head;
while (p2 != null)
{
if (p1 == p2)
{
break;
}
p1 = p1.next;
p2 = p2.next;
p2 = p2 == null ? null : p2.next;
}
if (p2 == null)
return null;
p1 = head;
while (p1 != p2)
{
p1 = p1.next;
p2 = p2.next;
}
return p1;
}
CC150 2.5
原文:http://7371901.blog.51cto.com/7361901/1581737