面試題 02.08. 環路檢測
給定乙個鍊錶,如果它是有環鏈表,實現乙個演算法返回環路的開頭節點。示例1:有環鏈表的定義:在鍊錶中某個節點的next元素指向在它前面出現過的節點,則表明該鍊錶存在環路。
輸入:head = [3,2,0,-4], pos = 1示例2:輸出:tail connects to node index 1
解釋:鍊錶中有乙個環,其尾部連線到第二個節點。
輸入:head = [1,2], pos = 0示例3:輸出:tail connects to node index 0
解釋:鍊錶中有乙個環,其尾部連線到第乙個節點。
輸入:head = [1], pos = -1解題思路輸出:no cycle
解釋:鍊錶中沒有環。
快慢指標
首先想到使用快慢指標來判斷是否有環。接下來需要考慮的是快慢指標相等時會停在哪個結點上。使用1->2->3->4->5->6->7->8->9->?使?等於不同結點來進行尋找,尋找發現快慢指標停止點符合一下規律:從fast和head指標同時向後遍歷,相交的結點即是環的起點。構造**如下:
public listnode detectcycle
(listnode head)}if
(temp==null)
return null;
else
}}
面試題 02 08 環路檢測
給定乙個鍊錶,如果它是有環鏈表,實現乙個演算法返回環路的開頭節點。如果鍊錶中有某個節點,可以通過連續跟蹤 next 指標再次到達,則鍊錶中存在環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。注意 pos 不...
鍊錶 面試題 02 08 環路檢測 快慢指標
分析 如果鍊錶中有環,快慢指標肯定能相遇,這個非常容易證明,而且相遇肯定是在環中.快指標走的倍數是慢指標兩倍,這樣可以非常容易得出迴圈的開始結點 definition for singly linked list.struct listnode definition for singly linke...
2 8 環路檢測
template typename t singlylinkednode findloopfirst singlylinkednode head advance slow and fast pointers s s getnext f f getnext getnext if s f reset s...