鍊錶找環 python實現

2021-08-26 12:20:09 字數 1319 閱讀 8596

具體思路我就不在這照貓畫虎啦,具體的演算法思路可以看一下這篇文章,文章思路很清晰,文筆很詼諧幽默,我就直接上**吧,python語言實現:

# coding:utf-8

#節點類

class node(object):

def __init__(self, value):

self.val = value

self.next = none

#鍊錶找環方法一

#用乙個列表來儲存走過的鍊錶結點,然後在遍歷節點過程觀察結點是否會重複出現

def findloop(start):

vector =

while start:

if start in vector:

return true

start = start.next

return false

#這種思路的時間複雜度為o(n*n),空間複雜度為o(n)(用了乙個臨時列表儲存被遍歷過的節點)

##***********************************==分割線***********************************==##

#鍊錶找環方法二

#快慢指標法,如果鍊錶有環,那麼快的指標一定會再次遇到慢的指標(可以參考美隊二片頭

#美隊和獵鷹跑步那個場景)

def newfindloop(start):

first = start

second = start

while second:

first = first.next

if second.next == none:

return false

second = second.next.next

if first == second:

return true

return false

#這種思路時間複雜度為o(n),空間複雜度為o(1)

#建立乙個鍊錶

node1 = node(1)

node2 = node(2)

node3 = node(3)

node4 = node(4)

node5 = node(5)

node1.next = node2

node2.next = node3

node3.next = node4

node4.next = node5

node5.next = node2

print(findloop(node1))

print(newfindloop(node1))

找鍊錶環入口

對於乙個給定的鍊錶,返回環的入口節點,如果沒有環,返回null 拓展 你能給出不利用額外空間的解法麼?核心思路 快慢指標 定義乙個快指標每次走兩步 定義乙個慢指標每次走一步 快慢指標相遇則一定在環內,且方向相反 相遇後慢指標從頭開始走,快指標繼續走每次只走一步,最後快慢指標相遇一定是入口 具體計算參...

鍊錶找環的入口

題目描述 對於乙個給定的鍊錶,返回環的入口節點,如果沒有環,返回null 分析 定義乙個慢指標速度為1,乙個快指標速度為2 假設他們在z點相遇,慢指標總路程位s,快指標總路程位2s 此時,讓他們都以速度為1的倒退,慢指標倒退的起點,快指標還是會在z點。所以剛剛他們相同速度倒退了相同的路程,那麼現在讓...

鍊錶找環的入口

思想 先找是否有環 一快指標,一慢指標,相等即有環 找入口 1.可在快慢指標重合的地方開始繼續走慢指標,再次重合即環的長度n 一指標先走n步,另加一指標一起走,相等地方即入口 2.一指標指向頭指標,一指標在重合的地方,一起單步走,相等地方即入口 解釋 頭節點離環入口距離a,環長度為n m1為慢指標走...