演算法之鍊錶環路檢測

2021-10-07 13:36:52 字數 962 閱讀 4776

問題描述

給定乙個有環鏈表,實現乙個演算法返回環路的開頭節點。

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

示例 1:

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

輸出:tail connects to node index 1

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

示例 2:

輸入:head = [5,3], pos = 0

輸出:tail connects to node index 0

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

示例 3:

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

輸出:no cycle

解釋:鍊錶中沒有環。

要求空間複雜度為o(1)

演算法實現

/**

* definition for singly-linked list.

* 1. 先通過快慢指標,求得相遇點(fast指標速度是slow的2倍)

* 2. 再將fast指標從head開始,slow指標從相遇點開始,以相同的速度往下走,直到相遇,那麼此時的相遇點就是「環路的頭結點」

*/public

class

solution

}//如果沒有相遇點返回null

if(fast==null||fast.next==null)

//將快慢指標中的快指標重置到頭部,

//並且與慢指標一起勻速往後奏,相遇點就是入口點

fast = head;

while

(fast!=slow)

return fast;

}}

鍊錶環路檢測

給定乙個有環鏈表,實現乙個演算法返回環路的開頭節點。有環鏈表的定義 在鍊錶中某個節點的next元素指向在它前面出現過的節點,則表明該鍊錶存在環路。鍊錶有環理解 如果鍊錶中有環,那麼快慢指標就一定可以相遇,此時快指標移動的距離是慢指標的兩倍題解 1.檢測有沒有環,使用快慢指標slow和fast 一次走...

Map中環路檢測

map是一種鍵值對的集合,因為鍵值在使用時很有可能呼互換,比方說鍵k1對應的值時v1,然而v1又能作為鍵,而之前的k1將會作為k1對應的值,就產生了環路了,在很多情況下。產生環路可能會使程式無休止的執行下去造成嚴重後果,因此需要檢測環路產生,當新插入的鍵值對會使原先的map產生環路,就拒絕這次插入 ...

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...