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不报错