鍊錶中環的入口結點(python)

2021-09-10 12:30:28 字數 999 閱讀 3560

leetcode 142. linked list cycle ii

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

head 頭節點

e 入口節點

x 首次相遇節點

a 頭節點到入口節點距離

h 第一次相遇節點到入口節點的距離

c 環長

慢指標一次一步,快指標一次兩步,第一次相遇時,慢指標走了n步,快指標走了2n步,也就是說,第一次相遇時快指標比慢指標多走了一圈c。

即: 2n = n + c

推出: n=c

也就是說,慢指標走了乙個環長c

我們知道,鍊錶的長度等於a+c。對於慢指標來說,已經走了乙個環長c,它剩下沒走完的距離,就是相遇點到入口點的那段距離h。將快指標重置在頭節點處,快慢指標一起,手拉手一步一步地走,再次相遇的地方就是入口節點!

class solution(object):

def detectcycle(self, head):

""":type head: listnode

:rtype: listnode

"""if head == none or head.next == none:

return none

slow = fast = head

while fast and fast.next:

slow = slow.next

fast = fast.next.next

if slow == fast:

fast = head

while slow != fast:

slow = slow.next

fast = fast.next

return slow

return none

鍊錶中環的入口結點

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