Leetcode 142 環形鍊錶 II

2021-10-06 16:46:53 字數 1421 閱讀 7714

筆者以c++方式解決。

#include

"iostream"

using namespace std;

#include

"algorithm"

#include

"vector"

#include

"queue"

#include

"set"

#include

"map"

#include

"string"

#include

"stack"

/** * definition for singly-linked list.

* struct listnode

* };

*/struct listnode };

class solution

// 沒有環的特殊情況,防止 快慢指標訪問出錯

if(head->next ==

null

|| head->next->next ==

null

)// 定義快慢指標

listnode *slow = head->next;

listnode *fast = head->next->next;

// 當快慢指標沒有相遇的時候 不斷向前走

while

(slow != fast)

// 快指標走兩步

fast = fast->next->next;

// 慢指標走一步

slow = slow->next;

}// 迴圈結束,如果 fast 是空,則沒有環

if(fast ==

null

)// 否則有環 設定慢指標指向頭結點

slow = head;

// 快慢指標 一樣的速度向前走

while

(slow != fast)

// 相遇的地方就是入環的第乙個節點

return slow;}}

;int

main()

else

system

("pause");

return0;

}

執行結果

有點菜,有時間再優化一下。

難得有時間刷一波leetcode, 這次做乙個系統的記錄,等以後複習的時候可以有章可循,同時也期待各位讀者給出的建議。演算法真的是乙個照妖鏡,原來感覺自己也還行吧,但是演算法分分鐘教你做人。前人栽樹,後人乘涼。在學習演算法的過程中,看了前輩的成果,受益匪淺。

感謝各位前輩的辛勤付出,讓我們少走了很多的彎路!

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 僅僅是用於標識環的情況,並不會作為引數傳遞到函式中。說明 不允...