这个在我百度实习面试的时候出了一个题。网上的流行解法:
步长法:
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,这样我们就可以判断是否存在循环节了。这个题可以算是一个拓展思维的好题了。
这个在我百度实习面试的时候出了一个题。网上的流行解法:
步长法:
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,这样我们就可以判断是否存在循环节了。这个题可以算是一个拓展思维的好题了。
1449
709
347
718

被折叠的 条评论
为什么被折叠?