[動畫leetcode高頻面試之鏈表系列]3 鏈表成環

這是我的面試經歷以及整理的相關面試高頻題目,希望對大家有幫助。面試集錦

老規矩,不白嫖,點贊再看!

本文涉及知識點:

1 hash結構
2 鏈表

兩種數據結構在前面的相關內容都有所提及,如果忘記了,複習完再看效果一定翻倍喲!

一 題目

給定一個鏈表,判斷鏈表中是否有環。

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

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

小藍希望大家在此思考1分鐘,

效果會更好哈!

1 leetcode連接

原題連接

2 題目解析

仔細讀題,所謂成環,可能是循環單鏈表(首尾成環),也有可能部分成環,即尾部與部分結點相連。

解法1

看過前面相關內容的小夥伴一定很快想到的方法是使用hash數據結構來存儲每個訪問過的節點,如果某個節點的地址出現在了哈希表中,那麼再次出現的那個節點就是我們要找的成環的起點了。

解法2

我們假設兩小朋友,小藍和小小從同一地點直線出發如下圖,一路前進,所閱風景只能各自獨自欣賞了。

在這裏插入圖片描述
在這裏插入圖片描述

兩位爲了將自己所聽所聞所見隨時告訴對方,但是小藍走的快一點,一次走兩步,小小一次走一步,那麼在這個圓環中總有一次機會讓小藍遇見小小,從而開始分享自己的浪漫故事。如下圖所示。如果描述的不算清晰,我們繼續往下看,畫圖進一步理解。

在這裏插入圖片描述
在這裏插入圖片描述

解法2圖解

我們假設一個快指針p和慢指針q,如果無環,那麼各自走各自的路直到最後NULL也不會相遇。
如果有環,快指針自然走的快,一旦進入環,快指針可能在慢指針前面,也可以在慢指針後面直到相遇。以[3,2,0,4]爲例,p一次走兩步,q一次走一步,如下圖。

在這裏插入圖片描述
在這裏插入圖片描述

爲什麼快指針是走兩步,慢指針走一步,爲啥是兩倍?五倍不香?因爲如果五倍,快指針將更快的進入環,就會長時間在環內做無用功等待慢指針的到來

3 代碼實現

  • c++版本
    在這裏插入圖片描述
    在這裏插入圖片描述
  • python版本
    在這裏插入圖片描述
    在這裏插入圖片描述
  • java版本
    在這裏插入圖片描述
    在這裏插入圖片描述

4 收尾

系列算法題均採用三種不同的語言實現,滿足不同小夥伴的需求。如有不對的地方希望小夥伴指出,感謝!

❤️ 看完三件事:如果您看完有一點點收穫,快速迎娶白富美方式:
1 關注公衆號「我是程序員小賤」,第一時間閱讀最新的文章,公衆號後臺回覆 [小天使] 送你 最新的編程技術資料。
2 點贊,讓更多的人也能看到這篇內容(收藏不點贊,都是耍流氓 -_-)
3 關注我和專欄,讓我們成爲好基友。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章