使用快慢指针,追与相遇来解决
在存在环的情况下
start指针先进入环,在slow指针进入环的时候
start指针开始追赶,存在条件使得它们相遇(俩个指针的步数相差1)
因为只有在相差1的情况下,才能保证绝对相遇
证明如下
在slow指针进入环时,设这时俩指针相隔N
每次追赶时,俩指针距离减少1
N-1
N-2
.....
0(相遇)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
bool hasCycle(struct ListNode *head) {
struct ListNode* start = head;
struct ListNode* slow = head;
while(start != NULL && start->next != NULL)
{
slow=slow->next;
start=start->next->next;
if(start == slow)
{
return true;
}
}
return false;
}