【Leetcode142】リンクリストサイクルII

dは+ S1、ポインタが素早くS1 + S2が境界である、完全なポインタ、と正確に一致D + S1 + S2 + S1に行くときにポインタの速度、ポインタ速度を遅く

この場合、総距離、すなわち、二回だけ速い遅いポインタのポインタです:

D + S1 + S2 + S1 = 2×(D + S1)

S2 = D

すなわち、ミーティングポイントから始まり、最初の間に、環状部が出会うに結合しました。 

/**
 * 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* n1 = head;
        ListNode* n2 = head;
        bool flag = false;
        while(n2 && n2->next){
            n1 = n1->next;
            n2 = n2->next->next;
            if(n1 == n2){
                flag = true;
                break;
            }
        }
        if(!flag) return NULL;
        n1 = head;
        while(n1 != n2){
            n1 = n1->next;
            n2 = n2->next;
        }
        return n1;
    }
};

 

公開された112元の記事 ウォン称賛15 ビュー20000 +

おすすめ

転載: blog.csdn.net/weixin_39458342/article/details/104980849