劍指offer55 鍊錶中環的入口結點 題解

2022-07-26 12:51:09 字數 1032 閱讀 7276

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。

演算法流程:

雙指標第一次相遇:設兩指標 \(pslow\),\(pfast\) 指向鍊錶頭部 \(phead\),\(pfast\) 每輪走 \(1\) 步,\(pslow\) 每輪走 \(1\) 步

第一種結果:\(pfast\) 走過鍊錶末端,說明鍊錶無環,直接返回 \(null\)

第二種結果:當 \(pfast == pslow\) 時,兩指標在環中第一次相遇\(pslow\) 指標位置不變,將 \(pfast\) 指標重新指向鍊錶頭部結點 \(phead\),\(pslow\) 和 \(pfast\) 同時每輪往前走 \(1\) 步

當 \(pfast==pslow\) 時,兩指標第二次相遇,並同時指向鍊錶環入口,返回 \(pslow\) 指標指向的結點

/*

1.時間複雜度:o(n)

2.空間複雜度:o(1)

*/class solution

return pslow;}}

return null;

}};

演算法流程:

初始化 \(st\) 集合用於儲存單鏈表的每個結點

遍歷單鏈表的每個結點

如果當前結點沒有出現在 \(st\) 集合中,則將該結點新增到 \(st\) 集合中

否則,則代表該結點被重複遍歷,當前結點就是環的入口結點,返回該節點

遍歷完成,返回 \(null\)

/*

1.時間複雜度:o(n)

2.空間複雜度:o(n)

最壞情況下,單鏈表的所有結點都存入set

*/class solution

else

}return nullptr;

}};

劍指offer 55 鍊錶中環的入口結點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。找環的入口這個問題,其實是建立在另外乙個問題之上的 判斷單向鍊錶是否有環 土方法很多,但是比較好的目前就那麼乙個 一開始設定兩個指標都指向表頭,其中乙個每次 一步 前進乙個節點的叫p1,另外那個每次 一步 前進兩個節點的叫p2...

劍指offer55 鍊錶中環的入口結點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。設定塊 慢指標,快指標沒次走兩步,慢指標每次走一步,如果有環,它們一定會相遇 否則快指標會先到最後。相遇後選乙個指標在頭結點,然後與慢指標同時移動,相遇位置就為環入口 走一步和兩步 while slow fast if fas...

劍指offer 55 鍊錶中環的入口結點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。時間限制 1秒 空間限制 32768k 熱度指數 144136 本題知識點 鍊錶 見 struct listnode class solution while slow fast 2.計算環內長度 int l 0 dowhil...