題目
給定乙個鍊錶,判斷鍊錶中是否有環。
為了表示給定鍊錶中的環,我們使用整數 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
解釋:鍊錶中沒有環。
分析鍊錶有環就是說鍊錶中後面的節點的next指向了他前面的節點,這就使得鍊錶形成乙個閉環。
解決1.hash法
遍歷鍊錶將鍊錶的節點存放在hash表裡,當存放某乙個節點時,發現該節點已經存在,則證明鍊錶有環,如果鍊錶遍歷結束都不存在存入hash失敗,則鍊錶無環。
**實現
/**
* 判斷鍊錶是否有環 登錄檔法
* @param head
* @return
*/public
boolean
hascycle
(listnode head)
currnode = currnode.next;
}return
false
;}
時間複雜度:o(n)
空間複雜度:o(n)
2.快慢指標法
快慢指標法有點類似於跑步的感覺,而鍊錶就是跑道,請你慢慢體會。
假如這個跑道是直的,兩個速度不同的運動員從同一位置出發,他們將永遠不會相遇。
但是假設這個跑道是有乙個圈,那麼總有乙個時刻跑的快的會追上慢的。
**實現
/**
* 判斷鍊錶是否有環 雙指標 快慢指標
* @param head
* @return
*/public
boolean
hascycle
(listnode head)
listnode slow = head.next;
listnode fast = head.next.next;
while
(slow != fast)
slow = slow.next;
fast = fast.next.next;
}return
true
;}
時間複雜度:o(n)
空間複雜度:o(1)
LeetCode第141題 環形鍊錶
給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例 1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。defini...
LeetCode第141題環形鍊錶
題目描述 給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。解題思路 1 初步想法 沒有想法,估計是沒怎麼接觸鍊錶的題,看到別人的 用了兩個變數,乙個變數走一步,乙個變數走兩步,...
Leetcode第141題 環形鍊錶
給定乙個鍊錶,判斷鍊錶中是否有環。如果鍊錶中存在環,則返回 true 否則,返回 false 示例 1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。示例 2 輸入 head 1,2 pos 0 輸出 true 解釋 鍊錶中有乙個環,其尾部...