劍指offer 鍊錶中入口環節點

2021-08-31 03:09:55 字數 1591 閱讀 3772

題目描述

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出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 首先要想辦法確認鍊錶中是否有環。鍊錶中有環表明鍊錶中沒有尾節點,因此遍歷的時候會一直迴圈下去永不停止。用乙個指標的話很難確認表中是否有環。因此我們嘗試用兩個指標,讓乙個指標走快一點,乙個指標走慢一點,當兩個指標指向的節點一樣時,可...