leetcode第141題鍊錶有無環

2021-10-02 17:22:28 字數 1841 閱讀 1615

題目

給定乙個鍊錶,判斷鍊錶中是否有環。

為了表示給定鍊錶中的環,我們使用整數 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 解釋 鍊錶中有乙個環,其尾部...