2021 1 22 刷題(環形鍊錶

2022-06-11 12:30:10 字數 1321 閱讀 9181

題目描述:

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回 null。

為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鍊錶中沒有環。注意,pos 僅僅是用於標識環的情況,並不會作為引數傳遞到函式中。

說明:不允許修改給定的鍊錶。

高階:你是否可以使用 o(1) 空間解決此題?

示例 1:

輸入:head = [3,2,0,-4], pos = 1

輸出:返回索引為 1 的鍊錶節點

解釋:鍊錶中有乙個環,其尾部連線到第二個節點。

示例 2:

輸入:head = [1,2], pos = 0

輸出:返回索引為 0 的鍊錶節點

解釋:鍊錶中有乙個環,其尾部連線到第乙個節點。

示例 3:

輸入:head = [1], pos = -1

輸出:返回 null

解釋:鍊錶中沒有環。

解題:採用雙指標法

方法二:雜湊表

遍歷鍊錶中的每個節點,並將它記錄下來;一旦遇到了此前遍歷過的節點,就可以判定鍊錶中存在環。借助雜湊表可以很方便地實現。

c++ 11中對unordered_set描述大體如下:無序集合容器(unordered_set)是乙個儲存唯一(unique,即無重複)的關聯容器(associative container),容器中的元素無特別的秩序關係,該容器允許基於值的快速元素檢索,同時也支援正向迭代。

問題:如果鍊錶中有重複值,其實本沒有環,是否會產生錯誤?

回答:visited.insert(head),head是指標,存放的是位址,所以hash值是物件的記憶體位址。hash值根據物件記憶體位址生成(不改寫的情況下),兩個內容一樣的節點記憶體位址是不一樣的,所以即時鍊錶中存在重複元素,也可以保證答案正確。

class solution 

visited.insert(head);

head = head->next;

}return nullptr;}};

Leetcode刷題鍊錶之環形鍊錶

給定乙個鍊錶,判斷鍊錶中是否有環。定義兩個指標,從頭節點開始,兩個指標都向右移動,但是設定他們的移動速度不一樣,如果為環形鍊錶,則指標肯定會相遇。若為直鏈表,兩個指標至少有乙個為空。definition for singly linked list.class listnode public cla...

每日刷題 環形鍊錶II

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。說明 不允許修改給定的鍊錶。示例 例 1 輸入 head 3,2,0,4 pos 1 ...

Leetcode刷題(141 環形鍊錶)

三.提交記錄 四.備註 給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例 1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到...