給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。
# -*- coding:utf-8 -*-
# class listnode:
# def __init__(self, x):
# self.val = x
# self.next = none
class
solution
:def
entrynodeofloop
(self, phead)
:# write code here
#遍歷鍊錶,環的存在,遍歷遇見的第乙個重複的即為入口節點
nodelist =
while phead !=
none
:if phead not
in nodelist:
else
:return phead
phead = phead.
next
# -*- coding:utf-8 -*-
# class listnode:
# def __init__(self, x):
# self.val = x
# self.next = none
class
solution
:def
entrynodeofloop
(self, phead)
:# write code here
if phead ==
none
or phead.
next
==none
or phead.
next
.next
==none
:return
none
pslow = phead.
next
pfast = phead.
next
.next
# 快慢指標找到相遇點
while pslow != pfast:
if pfast.
next
==none
or pfast.
next
.next
==none
:return
none
pslow = pslow.
next
pfast = pfast.
next
.next
pslow = phead
# (出發點到入口的距離 = n*圈+相遇點到入口距離)速度相同,重新相遇的地方即為入口
while pslow != pfast:
pslow = pslow.
next
pfast = pfast.
next
return pslow
鍊錶中環的入口節點
乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。思路 通過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找到在環中的相匯點。此時...