Leetcode 141題 快慢指標

2021-10-09 23:34:51 字數 1154 閱讀 5936

給定乙個鍊錶,判斷鍊錶中是否有環。環的起點在**,環的大小是多少。

若鍊錶沒有環,那當快指標指到nullptr時,表示該鍊錶沒有環。

快指標速度:2

慢指標速度:1

當慢指標走到p2點時,不妨設快指標走到p1點。並設p1與p2間距離為d,

此時可列等式:

慢指標走的距離 * 2 =快指標走的距離

2 ∗k

=k+d

+n∗r

.2*k =k + d+n * r.

2∗k=k+

d+n∗

r.其中n為快指標已經走過環的圈數。

由上式可以推出

k =d

+n∗r

.k = d+n * r.

k=d+n∗

r.由圖中我們可以得知,p1與p2點相距d距離,則快指標追趕上慢指標則需要比慢指標多走(r-d)距離。

由此我們可以列式得出:

相距距離 / 速度差值 = 相距仍需要走的步數

r −d

2−1=

r−d,

.\frac=r-d,.

2−1r−d

​=r−

d,.快指標的速度為2,那麼我們就可以得到相遇的點為2(r-d)+d=2r-d,

也就是p3點,該點距離p2點的距離為d,與p1對稱。

推導相遇過程中,我們得到了乙個等式,k=d

+n∗r

.k = d+n * r.

k=d+n∗

r.那麼我們就可以根據這個等式,重新設定兩個指標,速度相同,起點不同, 乙個起點設定在鍊錶的頭結點,而另乙個則設定在相遇結點,根據上述等式,我們可以得知,兩結點相遇的地方就是環的入口點。

得到環的入口點,只需要遍歷一遍環,即可得到環的大小。

leetcode 141題環形鍊錶

你終究會成為你正在成為的人。給定乙個鍊錶,判斷鍊錶中是否有環 public boolean hascycle listnode node set.add node return false 複雜度分析 public boolean hascycle listnode node listnode fa...

leetcode141環形鍊錶 (快慢指標)

給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例 1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。示例 2 輸...

LeetCode 141 設計鍊錶

題目 簡單說下思路 用兩個指標,乙個跑得快,乙個跑得慢 例如乙個每次前進兩步,乙個前進一步 這樣只要快指標不會撞上null 如果遇到了null的情況那麼必然不存在環 快指標肯定會和慢指標碰面 就好像兩個人在環形跑道裡面跑步,同乙個起點起跑,乙個跑得慢乙個跑得快,那麼最後他們肯定還會碰到一起 具體 d...