Leetcode 141 環形鍊錶

2021-10-06 16:46:53 字數 1290 閱讀 9489

筆者以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

// 定義快慢指標,即快指標每次走兩步,慢指標每次走一步

listnode *slow = head;

listnode *fast = head;

// 只有乙個節點,並且 next 指向 null,則鍊錶中肯定沒有環

if(fast->next ==

null

)// 判斷是否是初始化時 快慢指標相等

int flag =0;

// 如果不是第一次快慢指標相等,同時快指標不等於 null

while

((fast !=

null)&&

(fast != slow || flag ==0)

)// 快指標走兩步

fast = fast->next->next;

// 慢指標走一步

slow = slow->next;

}// 如果快慢指標相等的時候退出,說明有環(具體證明可以參考相關資料)

return slow == fast;}}

;int

main()

執行結果

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

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

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

leetcode141 環形鍊錶

給定乙個鍊錶,判斷鍊錶中是否有環。高階 你能否不使用額外空間解決此題?思路 剛開始想著讓他迴圈下去,直到和頭結點相同的時候,就返回 true,否則就返回 false,但還是 too young too 實際上還是設定兩個指標,乙個快指標和乙個慢指標,只要是在環裡面,總會相遇的,就可 return t...

LeetCode141 環形鍊錶

題目描述 給定乙個鍊錶,判斷鍊錶中是否有環。高階 你能否不使用額外空間解決此題?演算法描述 1.使用兩個快慢指標遍歷鍊錶。slow每次走一步,fast每次走兩步。fast走到鍊錶尾部無環,slow與fast重疊則有環。2.若鍊錶的起始位置等於環的起始位置 slow走一圈回到起始位置,fast剛好走了...

LeetCode141環形鍊錶

給定乙個鍊錶,判斷鍊錶中是否有環。設定兩個指標,乙個fast乙個slow,遍歷整個列表,若達到表尾時仍未出現指標相等則鍊錶無環。c語言版 definition for singly linked list.struct listnode bool hascycle struct listnode h...