劍指offer55 鍊錶中環的入口結點

2022-05-16 14:00:16 字數 684 閱讀 7047

思路:(一開始不會,看了其他網友的才自己弄明白的)

該圖**於

先設兩個指標,乙個快指標(每次走兩步),乙個慢指標(每次走一步)。

2. 兩個指標都從頭結點開始走,假設兩點在某點相遇。此時慢指標走了w+y步,快指標走了w+y+n(正好比慢指標多走了一圈)或者w+y+xn步(和慢指標相遇時快指標已經走了x圈)。由2(w+y)=w+y+n得n=w+y,或由2(w+y)=w+y+xn得xn=w+y.

3. 讓慢指標從頭結點開始走,讓快指標從相遇結點開始走,(補充一下,此時快慢指標每次都走一步)直到相遇結點即為入口結點。

/*

struct listnode

};*/

class

solution

listnode* fp = phead; //

快指標,每次走兩步

listnode* sp = phead; //

慢指標,每次走一步

while(fp->next!=null && fp->next->next!=null)

return

fp; }

}return

null;}};

劍指offer 55 鍊錶中環的入口結點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。找環的入口這個問題,其實是建立在另外乙個問題之上的 判斷單向鍊錶是否有環 土方法很多,但是比較好的目前就那麼乙個 一開始設定兩個指標都指向表頭,其中乙個每次 一步 前進乙個節點的叫p1,另外那個每次 一步 前進兩個節點的叫p2...

劍指offer55 鍊錶中環的入口結點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。設定塊 慢指標,快指標沒次走兩步,慢指標每次走一步,如果有環,它們一定會相遇 否則快指標會先到最後。相遇後選乙個指標在頭結點,然後與慢指標同時移動,相遇位置就為環入口 走一步和兩步 while slow fast if fas...

劍指offer 55 鍊錶中環的入口結點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。時間限制 1秒 空間限制 32768k 熱度指數 144136 本題知識點 鍊錶 見 struct listnode class solution while slow fast 2.計算環內長度 int l 0 dowhil...