地址:
https://leetcode-cn.com/problems/linked-list-cycle/
https://leetcode-cn.com/problems/linked-list-cycle-ii/
描述:
思路:
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
ListNode *fast=head; ListNode *slow =head;
//while(slow!=fast)这样第一层循环就进不去
while(true){
if(!fast||!fast->next) return NULL;
//fast指针的步伐速度是慢指针的两倍
//当slow指针进入环时,fast一定已经在环内,假设已经走了nz-y
//假设slow和fast指针在c点相遇
fast=fast->next->next;
slow=slow->next;
if(fast==slow) break;
}
//快指针回到起点,slow指针不动仍在c点
fast=head;
while(fast!=slow){
//快慢指针速度相等
fast=fast->next;
slow=slow->next;
}
//return fast或者slow都可以反正都return 入口b
return fast;
}
};