鍊錶中環的入口節點 NC 3

2021-10-16 09:18:52 字數 1023 閱讀 7131

題目描述

對於乙個給定的鍊錶,返回環的入口節點,如果沒有環,返回null 拓展: 你能給出不利用額外空間的解法麼?

解題分兩個步驟:

首先,用快慢指標判斷是否有環,有的話,返回相遇時節點

兩個指標分別從head和相遇的節點開始遍歷,再次相遇時就是環的入口處節點

有乙個證明過程:

假設在z處相遇,根據快指標是慢指標的速度兩倍,可得出:

a +b

+n(b

+c)=

2∗(a

+b)a + b + n (b + c) = 2 * (a + b)

a+b+n(

b+c)

=2∗(

a+b)

即:a=(n

−1)∗

(b+c

)+ca = (n - 1) * (b + c) + c

a=(n−1

)∗(b

+c)+

c也就是說,若將兩指標分別放在起始位置和相遇位置,並以相同速度前進,當乙個指標走完距離a時,另乙個指標恰好走出 繞環n-1圈加上c的距離。

鍊錶中環的入口節點

乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。思路 通過141題,我們知道可以通過快慢指標來判斷是否有環,現在我們假設兩個指標相遇在z點,如圖 那麼我們可以知道fast指標走過a b c b slow指標走過a b 那麼2 a b a b c b 所以a c 那麼此時讓slow回到起點,fast依然...

鍊錶中環的入口節點

題目描述 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。演算法描述 受之前的面試題的啟發,如果我們在乙個有環的鍊錶中設定兩個鍊錶指標,乙個快,乙個慢,那麼兩個鍊錶指標相遇的時候,必然是位於鍊錶中的某個結點,利用這個結點,當我們從這個結點開始繼續遍歷,當再一次回到這個結點的時候,我們可以統計出環中的結...

鍊錶中環的入口節點

題目描述 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。解題思路 假設x為環前面的路程 黑色路程 a為環入口到相遇點的路程 藍色路程,假設順時針走 c為環的長度 藍色 橙色路程 第一步 找環中相匯點。分別用p1,p2指向鍊錶頭部,p1每次走一步,p2每次走二步,直到p1 p2找到在環中的相匯點。此時...