解法
快慢指针相遇后,其中一个指回头部,然后同步前进
代码
/**
* 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;
bool huan=false;
while(fast!=nullptr&& fast->next!=nullptr){
fast=fast->next->next;
slow = slow->next;
if(fast==slow){
huan=true;
break;
}
}
if(!huan)
return nullptr;
slow=head;
while(slow!=fast){
slow = slow->next;
fast = fast->next;
}
return slow;
}
};
证明
证明得到,重置指针走到L时候,从另一个指针从相遇点走k3l-delatr,即也到了交叉位置。