鍊錶 環形鍊錶

2021-10-11 20:52:51 字數 1480 閱讀 1661

題目描述:

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

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

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

判斷是否有環

返回入環的結點

不要被題目中的pos迷惑,在解題時可以先不考慮這個條件

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

return

nullptr;}

};

變數引入說明:slow: 慢指標,初始為頭節點,每次移動一位

fast: 快指標,初始為頭節點,每次移動兩位

con: 條件指標,初始化為頭節點。當slow==fast時(初始化的頭結點相等不算,此處指開始移動過後再次相遇的位置),開始移動,每次移動一位

解題思路分析:

如圖一所示,a表示單鏈表的長度,b+c表示雙鏈表的長度,紫色點為slow和fast的相遇點。存在如下等式關係:

slow *

2= fast;

slow = a + b;

fast = a + b +

n(c + b)

;(a + b)*2

= a + b +

n(c + b)

;a = c+

(n-1

)(b+c)

;等式1:快針走的是慢針的兩倍

等式2:第一次相遇時,slow的路程

等式3:第一次相遇時,fast的路程

等式4:二倍關係

等式5:從相遇點到入環點的距離加上 n-

1 圈的環長,恰好等於從鍊錶頭部到入環點的距離。此時,con開始移動,con和slow會在入環點相遇。

時間複雜度:o(n)

空間複雜度:o(1)

f1. 來自leetcode官網

參考**

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

return ans;}}

return

nullptr;}

};

鍊錶 環形鍊錶

環形鍊錶也叫迴圈鍊錶 可以是雙鏈表 也可以是單鏈表 操作原理和單鏈表差不多,只是最後乙個節點不在指向空 null 而是頭 head 這裡以單鏈表舉例 description 環形鍊錶 author lzq date 2018 11 3 20 46 version 1.0 public class a...

環形鍊錶 鍊錶

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

鍊錶 環形鍊錶 II

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回null。說明 不允許修改給定的鍊錶。高階 你是否可以不用額外空間解決此題?definition for singly linked list.class listnode public class solution start p1 ...