鍊錶中環的入口結點

2021-10-03 15:44:47 字數 923 閱讀 8531

題目描述:

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。

思路:

這題我們可以採用雙指標解法,一快一慢指標。快指標每次跑兩個element,慢指標每次跑乙個。如果存在乙個圈,總有一天,快指標是能追上慢指標的。

如下圖所示,我們先找到快慢指標相遇的點,p。我們再假設,環的入口在點q,從頭節點到點q距離為a,q p兩點間距離為b,p q兩點間距離為c。

因為快指標是慢指標的兩倍速,且他們在p點相遇,則我們可以得到等式 2(a+b) = a+b+c+b. 由3的等式,我們可得,c = a。

這時,因為我們的slow指標已經在p,我們可以新建乙個另外的指標,slow2,讓他從頭節點開始走,每次只走下乙個,原slow指標繼續保持原來的走法,和slow2同樣,每次只走下乙個。

我們期待著slow2和原slow指標的相遇,因為我們知道a=c,所以當他們相遇的點,一定是q了。

我們返回slow2或者slow任意乙個節點即可,因為此刻他們指向的是同乙個節點,即環的起始點,q。

**描述:

/*

public class listnode }*/

public

class

solution

listnode fast = phead;

listnode slow = phead;

while

(fast != null && slow != null)

return slow2;}}

return null;

}}

鍊錶中環的入口結點

乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。class listnode public class solution return p1 return null 分析 假設鍊錶的起始點到環的入口點節點數為k,環的的節點數為x,讓p2的速度是p1的兩倍,p1和p2相遇在環的第y各節點,可以得到如下等...

鍊錶中環的入口結點

題目要求 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點 分析 1 一種比較偷懶的方法就是遍歷鍊錶,並直接利用hashmap來儲存已經遍歷過的結點。一旦發現已經儲存過的結點,那麼該結點就是環的入口結點。2 參考自 我簡單畫了乙個圖 上傳之後一直是橫過來的。不知道為什麼轉不正 設定兩個指標p1和p2,乙...

鍊錶中環的入口結點

題目描述 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。思路1 設環中結點數是n,環的入口位置是x 距離起點走多少步 用快慢指標p,q,q移動的速度是p的2倍,當兩個指標相遇時p走的步數是y,q走的步數是2y,q比p多走k個環的距離,即 2y y kn,則y kn。p距離環的入口點的距離為y x,此...