題目:
給定乙個鍊錶,判斷鍊錶中是否有環。
高階:
你能否不使用額外空間解決此題?
思路:我本來自己想的是在環形鍊錶中。每乙個節點的下乙個節點都不可能為空。若為空的話返回false;若不為空的話,繼續迴圈,知道迴圈次數等於鍊錶的個數。實際上鍊表中的節點個數並不已知,所以該方法不可以。然後就直接看了leetcode中的解答,有兩種思路,如下;
思路1:使用雜湊表
建立hashset存放節點。如果節點已經存在,則存在環;若節點不存在放入set中。
(引用leetcode)我們遍歷所有結點並在雜湊表中儲存每個結點的引用(或記憶體位址)。如果當前結點為空結點null
(即已檢測到鍊錶尾部的下乙個結點),那麼我們已經遍歷完整個鍊錶,並且該鍊錶不是環形鍊錶。如果當前結點的引用已經存在於雜湊表中,那麼返回true
(即該鍊錶為環形鍊錶)。
複雜度分析(引用leetcode)
public class solution
else
tem=tem.next;
}return false;}}
思路2 :快慢指標
這種思路 比較巧妙。使用兩種快慢指標,快指標每次走兩步,慢指標每次走一步。對於無環鏈表,快指標先到達鍊錶末尾,對於有環鏈表,快指標總會追上滿指標。
複雜度分析(引用leetcode)
因此,在最糟糕的情形下,時間複雜度為 o(n+k),也就是 o(n)。
空間複雜度:o(1), 我們只使用了慢指標和快指標兩個結點,所以空間複雜度為 o(1)。
public class solution
else
}return true;}}
141 環形鍊錶 LeetCode
給定乙個鍊錶,判斷鍊錶中是否有環。如果鍊錶中有某個節點,可以通過連續跟蹤 next 指標再次到達,則鍊錶中存在環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。注意 pos 不作為引數進行傳遞,僅僅是為了標識...
LeetCode題解 141 環形鍊錶
給定乙個鍊錶,判斷鍊錶中是否有環。高階 你能否不使用額外空間解決此題?輸入 1 no cycle,輸出false 輸入 1,2 no cycle,輸出false 輸入 3,0,2,4 tail connects to node index 1,輸出true.我們首先畫一下如果鍊錶存在環的情況,如下圖...
leetcode141 環形鍊錶
給定乙個鍊錶,判斷鍊錶中是否有環。高階 你能否不使用額外空間解決此題?思路 剛開始想著讓他迴圈下去,直到和頭結點相同的時候,就返回 true,否則就返回 false,但還是 too young too 實際上還是設定兩個指標,乙個快指標和乙個慢指標,只要是在環裡面,總會相遇的,就可 return t...