演算法基礎 快慢指標遍歷 環形鍊錶

2021-10-07 03:39:11 字數 1373 閱讀 5754

給定乙個鍊錶,判斷鍊錶中是否有環。

為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鍊錶中沒有環。

示例 1:

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

輸出:true

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

示例 2:

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

輸出:true

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

示例 3:

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

輸出:false

解釋:鍊錶中沒有環。

解法一 標記法

我們在迴圈的過程中,給每乙個已經遍歷過的節點新增乙個標記flag,遍歷鍊錶,如果出現下乙個節點已經被標記時,就證明單鏈表有環。

/**

* definition for singly-linked list.

* function listnode(val)

*//**

* @param head

* @return

*/var

hascycle

=function

(head)

return

false

};

解法二 快慢指標

我們可以設定兩個指標slow,fast。兩者初始都在鍊錶頭部,慢指標每次前進一步,快指標每次前進兩步,如果兩者最終相遇,證明鍊錶有環。如果兩者未相遇,快指標定會在慢指標之前指向null

/**

* definition for singly-linked list.

* function listnode(val)

*//**

* @param head

* @return

*/var

hascycle

=function

(head)

// 如果迴圈跳出,,fast 為null 證明有環

return

false

};

環形鍊錶II(快慢指標)

題目 題解 假設該表是環形鍊錶,鏈式部分長度為a aa,環形部分長度為b bb。定義快指標fas tfast fast 和慢指標slo wslow slow 先讓fas tfast fast 每次走兩步,slo wslow slow 每次走一步,直到兩者相遇 接著讓fas tfast fast 重置...

環形鍊錶II 快慢指標

參考於 注意要用距離 幾何來理解這道題 使用快慢指標 definition for singly linked list.class listnode def init self,x self.val x self.next none class solution def detectcycle s...

環形鍊錶(快慢指標法)

給定乙個鍊錶,判斷鍊錶中是否有環。如果鍊錶中有某個節點,可以通過連續跟蹤 next 指標再次到達,則鍊錶中存在環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。注意 pos 不作為引數進行傳遞,僅僅是為了標識...