leetcode 刷題 找鍊錶中的環

2021-06-21 16:31:18 字數 907 閱讀 8234

這是道經典題目:各大面試寶典都會提到:

乙個鍊錶可能存在環,要求判斷是否存在環。

乙個解法是使用乙個hash表儲存節點值的存在性。

演算法大概是:

遍歷鍊錶,算出當前節點的hash值,檢視hash表中是否存在該值。

hash表中不存在該節點,則將節點加入hash表。

如果已經存在,則存在環。

題目要求不能使用額外的空間,那麼這種方法就不好使了。

這裡就要用到傳說中的快慢指標了。

演算法大概:

使用兩個指標,乙個指標一次前進兩步;另外乙個一次前進一步。

兩個指標同時出發,如果快指標到鍊錶尾巴了,則鍊錶肯定無環。

如果兩個指標指向了相同的節點(也就是連個指標值相同),則鍊錶有環。

要注意的是:這裡的快慢指標肯定要相遇。如果快指標每次移動三步,慢指標每次移動一步。則不一定。。。

**如下:

class solution:

def hascycle(self,head):

if head == none:

return false

if head.next == none:

return false

if head.next == head:

return true

fast = head.next.next

slow = head.next

while fast != none and slow != none:

if fast == slow:

return true

if fast.next == none:

return false

fast = fast.next.next

slow = slow.next

return false

leetcode刷題 鍊錶篇

class solution return result class solution class solution return cura 注 思路 相交節點到尾部的節點數是一樣的,所以當cura遍歷到尾部時,再從headb開始遍歷,同當curb遍歷到尾部時,再從heada開始遍歷,他們指標相遇時...

Leetcode刷題鍊錶之環形鍊錶

給定乙個鍊錶,判斷鍊錶中是否有環。定義兩個指標,從頭節點開始,兩個指標都向右移動,但是設定他們的移動速度不一樣,如果為環形鍊錶,則指標肯定會相遇。若為直鏈表,兩個指標至少有乙個為空。definition for singly linked list.class listnode public cla...

Leetcode鍊錶刷題 pytho語言

為方便後續的使用查詢,記錄一下 函式包括 找到兩個單鏈表相交的起始節點 反轉單鏈表 刪除鍊錶中等於給定值 val 的所有節點 definition for singly linked list.class listnode object def init self,x self.val x self...