思路:快慢指针,同一起点,速度不同,出发以后两个指针如果相遇说明有环。
这里的相遇不是指第一次fast超过slow,而是指fast==slow。也就是说也可能存在fast超过slow,但是两结点未重合。
快慢指针一定会重合的原理:
bool hasCycle(struct ListNode *head)
{
struct ListNode * slow=head;
struct ListNode * fast=head;
while(fast&&fast->next)
{
slow=slow->next;
fast=fast->next->next;
if(fast==slow)
return true;
}
return false;
}