這是我的面試經歷以及整理的相關面試高頻題目,希望對大家有幫助。面試集錦
老規矩,不白嫖,點贊再看!
本文涉及知識點:
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 關注我和專欄,讓我們成爲好基友。