解法
快慢指针相遇后,其中一个指回头部,然后同步前进
代码
/*** 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,即也到了交叉位置。