我必须在使用海龟和野兔解决方案发现的链表中找出循环,如下所示
boolean hasLoop(Node first) {
if(first == null) // list does not exist..so no loop either.
return false;
Node slow, fast; // create two references.
slow = fast = first; // make both refer to the start of the list.
while(true) {
slow = slow.next; // 1 hop.
if(fast.next != null)
fast = fast.next.next; // 2 hops.
else
return false; // next node null => no loop.
if(slow == null || fast == null) // if either hits null..no loop.
return false;
if(slow == fast) // if the two ever meet...we must have a loop.
return true;
}
}
现在我的问题是如何检测循环的开始以及如何计算程序的复杂性,就好像我增加了列表的大小一样。指针相交的点在列表大小中的比例不会增加。