演算法 環形鍊錶 II

2021-09-09 06:17:21 字數 1183 閱讀 6343

輸入:head = [3,2,0,-4], pos = 1輸出:tail connects to node index 1解釋:鍊錶中有乙個環,其尾部連線到第二個節點。

輸入:head = [1,2], pos = 0輸出:tail connects to node index 0解釋:鍊錶中有乙個環,其尾部連線到第乙個節點。

public class cyclelist 

} public listnode hascycle(listnode head)

} if(!flag)

slownode = head;

while (slownode != quicknode)

return slownode;

}}

首先是判斷鍊錶是否存在環路,靠的是乙個慢指標(只走一步)和快指標(走兩步)。

當他們相遇的時候即存在環路,否則快指標會走到最後為null 

我們可以看到鍊錶有環是這種情況。

分析走過的路程。

慢指標:x1 + x2

快指標:x1 + x2 + x3 + x2

快指標走的路程是慢指標的兩倍。所以

x1 + x2 + x3 + x2 = 2 * (x1 + x2)

所以 x1 = x3.

所以鍊錶有環時,從起始點走和快慢指標交匯點走到環的開始節點的路程是一樣的,也就是x1 = x3

才會有這段**

slownode = head;

while (slownode != quicknode)

return slownode;

可以讓時間複雜度保持在o(n),空間複雜度o(1)

swift演算法 環形鍊錶II

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

環形鍊錶 II

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

環形鍊錶II

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