鏈表是否有環,視頻講解

Day 40:判斷鏈表是否有環

1 鏈表有環是什麼意思?

在判斷是否有環前,需要先知道什麼是鏈表中的環?

如下所示的鏈表有5個節點組成,框內的數字代表編號,也可理解爲節點的地址。注意區分地址值和鏈表的數據域是完全不同的:

節點0指向節點3,而節點10又指向節點3,所以節點3就是環的入口,形成如下所示的一個環:

如果像下面這樣遍歷一個有環鏈表:

# head 是鏈表的頭
while head:
    print(head.data)
    head = head.next

程序將會進入死循環,會在環內無窮的跑下去。

所以,研究如何判斷鏈表是否有環,是一個非常有意義的課題,也是面試中常考的。

2 如何判斷鏈表是否有環

通過哈希的方法,代碼比較好理解:

class Solution(object):
    def hasCycle(self, head):
        s = set()
        tmp = head
        while tmp:
            if tmp in s:
                return True
            s.add(tmp)
            tmp = tmp.next 
        return False

今天主要分析如何使用快慢指針判斷鏈表是否有環,做到O(1)的空間複雜度,O(n)的時間複雜度,因此比哈希方法要更加節省內存空間。

快慢指針判斷鏈表是否有環,代碼其實非常清晰,但是理解背後的數學原理,纔是真正寫出代碼的關鍵,也就說一旦理解原理,就會很自然的寫出代碼;相反,如果不理解,僅僅憑記憶,那麼時間長了,就容易忘記,面試時就容易寫錯。

今天,重點也是理解背後的數學原理,下面這個視頻參考網絡,講解的非常清晰,大家不妨看一遍:

代碼網絡上一搜有很多,在這裏就不再貼了。

《end》

關注回覆1,

領取650道leetcode題目和答案 pdf

歡迎加入星球,從零學程序員必備算法,每天在星球內記錄學習過程、學習星友超讚的回答,還會不定期送精華資料!打卡 300 天,退還除平臺收取的其他所有費用。

長按二維碼,查看我的星球

Day1-Day35 刷題總結的思維導圖

原創不易,歡迎三連支持

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