int DetermineTermination(node* head)
{
node *fast,*slow;
fast=slow=head;
while(1)
{
if(!fast || !fast-next)
return 0;
if(fast==slow || fast->next==slow)
return 1;
else
{
slow=slow->next;
fast=fast->next->next;
}
}
}
当慢指针遍历到第n个结点的时候,块指针将遍历过2n个结点;所以不管链表尾部的循环体包含多少个结点,快指针肯定已经追上或者超过慢指针了。也就是说,你最多需要遍历3n个结点,因此该算法仍将是O(n)级的。