這是道經典題目:各大面試寶典都會提到:
乙個鍊錶可能存在環,要求判斷是否存在環。
乙個解法是使用乙個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...