找環的入口

2021-09-29 17:11:35 字數 918 閱讀 7267

要想找到環的入口總共有三步

1.創造乙個環

2..判斷是否有環,

3.如果有環,就可以找環的入口了。

由於前兩步比較簡單,這裡只詳細解釋找環的入口這一步,**中會每步詳細實現。

關於數學:fast兩步兩步走,slow一步一步走,那麼fast走過的路就是slow路程的兩倍。就可以有下面的式子:式中 l 是環的長度

n+m+kl = 2(n+m)

kl = m+n

fast只多走了一圈,所以k=1;環的長度就是m+n

//創造環

public

void

creteloop()

cur.next =

this

.head.next.next;

}//判斷是否有環

public

boolean

hascycle()

}if(fast == null || fast.next == null)

return

true;}

//給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回 null

public listnode detectcycle()

}if(fast==null || fast.next==null)

slow =

this

.head;

while

(slow!=fast)

return slow;

}

找鍊錶環入口

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

鍊錶找環的入口

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

鍊錶找環的入口

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