2021.1.9
1.第一种情形,没有环,那么一定走得到NULL结点
2.第二种情形,有环,那么没有NULL结点,且一定走得到表内存在的结点
链表一共有n个结点,设置两个指针fast每次走两步,slow每次走一步,假如两者距离为t(t<n),如上图所示t=5,那么第二次走两者距离t-2+1=t-1,第三次距离t-1-2+1=t-2,第四次距离t-3,以此类推知道t=0,两者相遇,说明在有环的情况下fast和slow一定可以相遇。
class Solution {
public:
bool hasCycle(ListNode *head) {
ListNode *fast=head;
ListNode *slow=head;
while(slow!=NULL && fast->next!=NULL && fast->next->next!=NULL){
fast=fast->next->next;
slow=slow->next;
if(fast==slow)
return true;
}
return false;
}
};Slow!=NULL是为了解决情形一,即无环的情况;
Fast->next是为了后面fast->next->next不报错

京公网安备 11010502036488号