Bootstrap

环形链表2证明

解法

快慢指针相遇后,其中一个指回头部,然后同步前进

代码

/**
 * 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,即也到了交叉位置。

;