16 鍊錶 鍊錶中環的入口節點(python版)

2021-10-03 21:04:31 字數 1248 閱讀 2091

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

class

solution

: def entrynodeofloop

(self, phead)

: templist =

p = phead

while p:

if p in templist:

return p

else

: templist.

(p) p = p.next

class

solution

: def entrynodeofloop

(self, phead)

: # 如果slow走了l的長度,那麼fast就走了2l的長度

# 假設從開始到入口點的長度是s,slow在環裡走的長度是d

# 那麼l=s+d

# 假設環內slow沒走的長度是m,那麼m+d就位環的長度

# fast的長度是 n*

(m+d)

+d+s=

2l # 帶入n*

(m+d)

+d+s=

(s+d)*2

# s=m+

(n-1

)(m+d)

fastpointer = phead.next

if not fastpointer:

return none

fastpointer = fastpointer.next

slowpointer = phead.next

while fastpointer != slowpointer:

fastpointer = fastpointer.next

if not fastpointer:

return none

fastpointer = fastpointer.next

slowpointer = slowpointer.next

fastpointer = phead

while fastpointer != slowpointer:

fastpointer = fastpointer.next

slowpointer = slowpointer.next

return fastpointer

時間複雜度為o(n)

找出鍊錶中環的入口節點

鍊錶中環的入口節點

乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。思路 通過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找到在環中的相匯點。此時...