leetcode 142 環形鍊錶 II C語言

2021-10-02 12:32:42 字數 1274 閱讀 5307

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

為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鍊錶中沒有環。

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

示例 1:

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

輸出:tail connects to node index 1

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

示例 2:

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

輸出:tail connects to node index 0

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

示例 3:

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

輸出:no cycle

解釋:鍊錶中沒有環。

高階:你是否可以不用額外空間解決此題?

1.模擬一快一慢兩位運動員在跑道上跑圈,如果一直跑下去,快的與慢的相遇時,快的比慢的多跑了一圈。

使用快慢指標,快指標一次走兩步,慢指標一次走一步,相遇時快指標比慢指標多走一圈。

假設煉表頭到環形鍊錶的交點距離為a

環形鍊錶的交點到快慢指標相遇(即逆時針的距離)為b

環的剩餘距離為c

慢指標所走的距離為a+b

快指標所走的距離為a+b+(c+b)

且快指標所走的距離是慢指標的兩倍

2 * (a + b) = a + b + (c + b) 

即 a = c

/**

* definition for singly-linked list.

* struct listnode ;

*/struct listnode *detectcycle(struct listnode *head)

slow = head;

fast = head->next;

while (slow != fast)

slow = slow->next;

fast = fast->next->next;

}slow = head;

fast = fast->next;

while (slow != fast)

return slow;

}

leetcode 142 環形鍊錶

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回null。說明 不允許修改給定的鍊錶。思路 首先通過快慢指標的方法判斷鍊錶是否有環 接下來如果有環,則尋找入環的第乙個節點。具體的方法為,首先假定鍊錶起點到入環的第乙個節點a的長度為a 未知 到快慢指標相遇的節點b的長度為 a b 這個...

leetcode 142環形鍊錶

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

Leetcode 142 環形鍊錶

問題重述 給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。注意,pos 僅僅是用於標識環的情況,並不會作為引數傳遞到函式中。說明 不允...