55 鍊錶中環的入口結點 python

2022-06-13 17:12:12 字數 1086 閱讀 3071

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

思路如果slow走了l的長度那麼fast走了2l

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

那麼 l = s + d

假設環內slow沒走的長度是m,fast走的長度是n*(m+d) + d + s = 2l

帶入得n*(m+d) + d + s = 2(s+d)  =>   s = m+(n-1)(m+d)     m+d就是繞環一圈   所以s = m  所以相遇後,讓slow和head一起走,相遇點就是入環節點

1

class

solution:

2def

entrynodeofloop(self, phead):3#

write code here

4if phead ==none:

5return

none

6 fastpointer =phead

7 slowpointer =phead

8while fastpointer and

fastpointer.next:

9 slowpointer =slowpointer.next

10 fastpointer =fastpointer.next.next

11if fastpointer ==slowpointer:

12break

13if fastpointer == none or fastpointer.next ==none:

14return

none

15 fastpointer =phead

16while fastpointer!=slowpointer:

17 fastpointer=fastpointer.next

18 slowpointer=slowpointer.next

19return fastpointer

2019-12-31 22:17:13

55 鍊錶中環的入口結點

乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。思路一 使用乙個集合unordered set來儲存已經訪問過的結點,當第一次訪問到已經被訪問過的結點時,即為環的入口結點,此方法需要額外的空間進行輔助。一 struct listnode class solution else phead phead ...

55 鍊錶中環的入口結點

題目描述 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。struct listnode class solution 兩個指標乙個fast 乙個slow同時從乙個鍊錶的頭部出發 fast一次走2步,slow一次走一步,如果該鍊錶有環,兩個指標必然在環內相遇 此時只需要把其...

55 鍊錶中環的入口結點

題目描述 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。分析 1.得出鍊錶中環內節點數n 使用快慢指標,乙個每次走一步,乙個每次走兩步。兩指標相遇,表明鍊錶中存在環,且相遇的結點一定在環中。從相遇結點出發邊移動邊計數,直至再次回到此結點,得出環中結點數n。2.用兩個指標p...