面試題 02 08 環路檢測

2021-10-09 16:15:23 字數 896 閱讀 6094

面試題 02.08. 環路檢測

給定乙個鍊錶,如果它是有環鏈表,實現乙個演算法返回環路的開頭節點。

有環鏈表的定義:在鍊錶中某個節點的next元素指向在它前面出現過的節點,則表明該鍊錶存在環路。

示例1:

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

輸出:tail connects to node index 1

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

示例2:

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

輸出:tail connects to node index 0

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

示例3:

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