輸入: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 ...