給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出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一起走,相遇點就是入環節點
1class
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...