LeetCode 142 環形鍊錶II

2021-10-09 02:42:32 字數 2296 閱讀 9556

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

為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鍊錶中沒有環。

說明:不允許修改給定的鍊錶。

示例 1:

輸入:head = [3,2,0,-4], pos = 1

輸出:tail connects to node index 1

解釋:鍊錶中有乙個環,其尾部連線到第二個節點。

輸入:head = [1,2], pos = 0

輸出:tail connects to node index 0

解釋:鍊錶中有乙個環,其尾部連線到第乙個節點。

示例 3:

輸入:head = [1], pos = -1

輸出:no cycle

解釋:鍊錶中沒有環。

142題原題:

之前在分析鍊錶倒數第n個元素、鍊錶的中間結點兩個問題上都曾賣過快慢指標還能應用在判斷鍊錶是否有環的問題上的關子。這三個問題真的可以說是快慢指標入門級別的經典問題,大家一定要熟練掌握。

這個問題我們首先要回歸到這個鍊錶是否有環這個最基礎的問題上來。為什麼這道題我們可以利用快慢指標思想,很簡單,假設有乙個300斤走路都喘的大胖子和乙個長跑全國冠軍一起跑3000m,我們不難看到兩人從同一起跑線出發以後,可能會在跑道的某個位置尷尬的相遇,因為跑道是環形的,專業的運動員「超圈」了。所以我們先做好準備工作:

class

solution

};

我們如何確定快慢指標的步長呢?我之前說過快慢指標是用來體現出相對距離的差距的。並不是刻板印象中快指標只能走兩步,慢指標只能走一步的。但是在這個問題裡,這樣的設定確實很合適的。你也許會問,為什麼快指標不能走三步、四步呢?首先,走三步四步的判斷是很麻煩的,要保證fast && fast->next && fast->next->next均不為nullptr,其次我們假設賽道由兩部分,前面是乙個直線跑道,後面才是乙個環形操場。快指標跑的再快,相遇的地點一定也是在環內,因為二者速度有差距,不可能在直線賽道上相遇。還拿胖子和運動員來說事,兩個人先跑一段直線然後進到環形操場裡,運動員跑得快,早就跑到操場裡了。胖子還在和那一條「永恆的直線」作鬥爭呢。運動員只能在操場裡乙個人瞎跑,所以運動員對付胖子,根本不需要拿出百分之百的實力,這樣也能起到實質性的判斷。

};而142題要我們找到入環的第乙個結點,我們首先也要先進行乙個判斷:即鍊錶是否有環:

class

solution}if

( hascycle )}}

;

接下來,看懂這個圖上對每個量的定義:

明確了嘛,接下來來分析這些量:

v(fast) = 2v(slow) = 2step,慢指標到達相遇點走過的距離為(a + b),所以快指標再次回到相遇點走過的距離為2(a + b)。

而快指標實際走過的距離為a + b + c + b。

兩者相等,寫出方程:

2(a + b) = a + b + c + b

解得:a = c

即即起點到環入口的距離 = 相遇點到環入口的距離

所以令fast回到頭結點,slow停留在相遇的結點,兩指標同步以v(fast) = v(slow) = 1step的速度往前走,兩者再次相遇時,這個相遇的結點就是環的路口。

沒錯,畫乙個圖就可以清晰地知道我在講什麼了。

class

solution}if

( hascycle )

return fast;

}return

nullptr;}

};

leetcode 142 環形鍊錶

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回null。說明 不允許修改給定的鍊錶。思路 首先通過快慢指標的方法判斷鍊錶是否有環 接下來如果有環,則尋找入環的第乙個節點。具體的方法為,首先假定鍊錶起點到入環的第乙個節點a的長度為a 未知 到快慢指標相遇的節點b的長度為 a b 這個...

leetcode 142環形鍊錶

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。說明 不允許修改給定的鍊錶。example 輸入 head 3,2,0,4 pos 1...

Leetcode 142 環形鍊錶

問題重述 給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。注意,pos 僅僅是用於標識環的情況,並不會作為引數傳遞到函式中。說明 不允...