鍊錶中環的入口結點

2021-10-24 02:26:41 字數 1103 閱讀 2778

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

1.遍歷單鏈表的每個結點

2.如果當前結點位址沒有出現在set中,則存入set中

3.否則,出現在set中,則當前結點就是環的入口結點

4.整個單鏈表遍歷完,若沒出現在set中,則不存在環

class solution 

else

}return nullptr;}};

若不用輔助結構set,該怎麼做呢?這裡畫了一張圖

1.初始化:快指標fast指向頭結點, 慢指標slow指向頭結點

2.讓fast一次走兩步, slow一次走一步,第一次相遇在c處,停止

3.然後讓fast指向頭結點,slow原地不動,讓後fast,slow每次走一步,當再次相遇,就是入口結點。

如上解釋:

如果慢指標slow第一次走到了b點處,距離c點處還有距離y,那麼fast指標應該停留在d點處,且bd距離為y(圖中所示是假設快指標走了一圈就相遇,為了便於分析),

也就是db+bc=2y,(因為fast一次走2步,慢指標一次走1步,並且相遇在c處)

在c點處,此時慢指標slow走的點為abc,距離為x+y,而快指標fast走的點為abcdbc,距離為2x+2y,

又因為:ab=x,bc=y,快指標走了2次bc,所以cdb距離為x,而ab距離也為x。

/*

struct listnode

};*/

class solution

if(!fast || !fast->next) return nullptr;

fast = phead;

while(fast != slow)

return fast;}};

鍊錶中環的入口結點

乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。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,此...