算法-判断链表是否有环

这个在我百度实习面试的时候出了一个题。网上的流行解法:

步长法:

p=head;

q=head;

while(p && q && q->next)

{

    p=p->next;

    q=q->next->next;

    if(p == q)

        return 1;

}

return 0;

解释:p每次走一步,q每次走2步,这样如果存在循环节,我们假设循环节长度为m,那么肯定存在一个整数i使得

(p+i)%m=(q+2*i)%m,这样我们就可以判断是否存在循环节了。这个题可以算是一个拓展思维的好题了。

 

你可能感兴趣的:(算法-判断链表是否有环)