題目描述
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。
使用快慢指標的方法首先判斷是否存在環,如果存在,把meetnode輸出
判斷環的長度
根據環的長度設定快慢指標,如果相遇,則是入口節點
class
listnode
:def
__init__
(self, x)
: self.val = x
self.
next
=none
class
solution
:def
meetingnode
(self, phead)
:if phead ==
none
:return
none
slow = fast = phead
while slow and fast:
slow = slow.
next
if slow:
fast = fast.
next
.next
if fast == slow:
return slow
return
none
defentrynodeofloop
(self, phead)
:# write code here
meetnode = self.meetingnode(phead)
if meetnode ==
none
:return
none
p, loopsize = meetnode.
next,1
while p != meetnode:
p = p.
next
loopsize +=
1 slow = fast = phead
for i in
range
(loopsize)
: fast = fast.
next
while slow != fast:
slow = slow.
next
fast = fast.
next
return slow
head = listnode(1)
p1 = head.
next
= listnode(2)
p2 = p1.
next
= listnode(3)
p3 = p2.
next
= listnode(4)
p4 = p3.
next
= listnode(5)
p5 = p4.
next
= listnode(6)
p5.next
= p5
print
(solution(
).entrynodeofloop(head)
.val)
劍指Offer 鍊錶中環的入口節點
1.如果鍊錶中有環,可以通過快慢指標,最後快慢指標肯定會相會於環中的某個節點 2.從這個相會的節點開始,當再次遇到該節點,即可統計環中有節點數 n 3.設定兩個指標p,p1,p從頭先走 n 步,p1在頭部,然後兩個指標同時 走,當兩指標相遇時,相遇的節點即是環的入口。c struct listnod...
劍指Offer 鍊錶中環的入口節點
判斷鍊錶中是否有環lo w fa stslow fast 均從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存在環,fas tfast 遇到null null 退出。low fas tslow fast 均從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存在環,fas...
劍指Offer 鍊錶中環的節點入口
題目 如果鍊錶中存在環,則找出環的入口節點,如下圖,環的入口為節點3 首先要想辦法確認鍊錶中是否有環。鍊錶中有環表明鍊錶中沒有尾節點,因此遍歷的時候會一直迴圈下去永不停止。用乙個指標的話很難確認表中是否有環。因此我們嘗試用兩個指標,讓乙個指標走快一點,乙個指標走慢一點,當兩個指標指向的節點一樣時,可...