給定乙個鍊錶,判斷鍊錶中是否有環。
如果鍊錶中有某個節點,可以通過連續跟蹤 next 指標再次到達,則鍊錶中存在環。
3.1使用雜湊表
遍歷鍊錶,將每乙個節點存入乙個雜湊表中,利用雜湊表不能儲存相同元素的特性,判斷是否儲存成功,如果不成功,則存在環
public boolean hascycle1(listnode head)
head = head.next;
}return false;
}
3.2快慢指標
使用兩個指標分別遍歷鍊錶,如果存在環,則兩個指標一定能在環中相遇,快指標一次走兩步,慢指標一次走一步
public boolean hascycle2(listnode head)
listnode fast = head.next;
listnode slow = head;
while (slow != fast)
fast = fast.next.next;
slow = slow.next;
}return true;
}
快慢指標有點類似於追擊問題,如果是一條直線,快指標一定先到達終點,並且快慢指標不會相遇;但是如果是乙個圓形跑道(有環),那快指標一定在某乙個時刻追上慢指標,相當於慢指標**圈了。如果我們能判斷兩指標相遇了,那麼可以得出有環的結論。 LeetCode 141 設計鍊錶
題目 簡單說下思路 用兩個指標,乙個跑得快,乙個跑得慢 例如乙個每次前進兩步,乙個前進一步 這樣只要快指標不會撞上null 如果遇到了null的情況那麼必然不存在環 快指標肯定會和慢指標碰面 就好像兩個人在環形跑道裡面跑步,同乙個起點起跑,乙個跑得慢乙個跑得快,那麼最後他們肯定還會碰到一起 具體 d...
leetcode 141題環形鍊錶
你終究會成為你正在成為的人。給定乙個鍊錶,判斷鍊錶中是否有環 public boolean hascycle listnode node set.add node return false 複雜度分析 public boolean hascycle listnode node listnode fa...
LeetCode 141 環形鍊錶 鍊錶
給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例 1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。在這裡插入描...