142 環形鍊錶 II

2021-10-13 11:56:48 字數 1454 閱讀 6509

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

為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鍊錶中沒有環。注意,pos 僅僅是用於標識環的情況,並不會作為引數傳遞到函式中。

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

高階:你是否可以使用 o(1) 空間解決此題?

示例 1:

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

輸出:返回索引為 1 的鍊錶節點

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

1、因為快指標移動速度是慢指標的2倍,那麼當鍊表中有環時,則快指標會在環中與慢指標相遇。

2、第一次相遇時,假設慢指標 slow 走了 k 步,那麼快指標 fast 一定走了 2k 步,也就是說比 slow 多走了 k 步(也就是環的長度)。

3、設相遇點距環的起點的距離為 m,那麼環的起點距頭結點 head 的距離為 k - m,也就是說如果從 head 前進 k - m 步就能到達環起點。

巧的是,如果從相遇點繼續前進 k - m 步,也恰好到達環起點。

4、所以,只要我們把快慢指標中的任乙個重新指向 head,然後兩個指標同速前進,k - m 步後就會相遇,相遇之處就是環的起點了。

142 環形鍊錶 II

還是快慢指標的問題,當發現有環時,將fast指向head,fast一次向前移動乙個節點,則fast和slow一定會在環的入口相遇.證明 設s為slow指標走的節點個數,m為環的入口距head的位置 則第一次相遇時,fast和head相對於環入口的位置相同,fast在環中的相對於環入口的位置在 2s ...

142 環形鍊錶 II

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回null。說明 不允許修改給定的鍊錶。高階 你是否可以不用額外空間解決此題?definition for singly linked list.struct listnode class solution node set.insert...

142 環形鍊錶 II

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