国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

數據結構與算法隨筆之鏈表-鏈表是否有環(二)

molyzzx / 3264人閱讀

摘要:初始化時指針走兩步,指針走一步,不停遍歷的變化最后快慢指針又相遇了,循環結束,代碼實現如下復雜度分析,假設鏈表長度為時間復雜度,鏈表無環時,快指針會先到達尾部,時間就是如果有環,那么假設環部長度為,時間就是,也就是空間復雜度

上一篇文章我們分析了下鏈表之反轉單向鏈表,這篇文章我們來分析下另外一個關于鏈表的經典題目。

判斷鏈表是否有環(在leetcode上的題目地址:環形鏈表)

題目描述

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

解決方案

一、可以使用hash表來實現,遍歷鏈表,每個節點放入hash表中,如果hash表中包含了某個節點,那么說明有重復節點存在,即是有環。如果沒環,那么鏈表會遍歷結束。代碼如下:

public static > boolean hasCycle1(Node head) {
    HashSet> set = new HashSet<>();
    for(Node n=head;n!=null;n=n.getNext()) {
        if(set.contains(n)) {
            return true;
        }
        set.add(n);
    }
    return false;
}

備注Node類參照上篇文章

復雜度分析,假設鏈表長度為n

時間復雜度:每個元素都要遍歷一遍,所以時間為O(n),每次訪問hash表時間為O(1)。

空間復雜度:O(n),n個元素都會添加到hash表中。

二、上面這種方法可以解決,但是需要借助額外的空間復雜度,能否不使用額外空間解決此題呢?答案是有的,使用快慢指針,想象下,兩個人在一個環形跑道上賽跑,跑得快的一定會追上跑的慢的那個人吧。下面用圖示來展示下整個過程。

初始化時:

fast指針走兩步,slow指針走一步,不停遍歷的變化:

最后快慢指針又相遇了,循環結束,代碼實現如下:

public static > boolean hasCycle(Node head) {
    if(head == null || head.getNext() == null) {
        return false;
    }
    Node slow = head;
    Node fast = head;
    while(fast != null && fast.getNext() != null) {
        slow = slow.getNext();
        fast = fast.getNext().getNext();
        if(slow == fast) {
            return true;
        }
    }
    return false;
}

復雜度分析,假設鏈表長度為n

時間復雜度:O(n),鏈表無環時,快指針會先到達尾部,時間就是O(n);如果有環,那么假設環部長度為K,時間就是O(n+k),也就是O(n)

空間復雜度:O(1)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71735.html

相關文章

  • 學習數據結構算法鏈表

    摘要:本系列所有文章第一篇文章學習數據結構與算法之棧與隊列第二篇文章學習數據結構與算法之鏈表第三篇文章學習數據結構與算法之集合第四篇文章學習數據結構與算法之字典和散列表第五篇文章學習數據結構與算法之二叉搜索樹簡單介紹鏈表鏈表一種常見的數據結構,可 本系列所有文章:第一篇文章:學習數據結構與算法之棧與隊列第二篇文章:學習數據結構與算法之鏈表第三篇文章:學習數據結構與算法之集合第四篇文章:學習數...

    jerryloveemily 評論0 收藏0
  • 每周一練 之 數據結構算法(LinkedList)

    摘要:不同鏈表是鏈式的存儲結構數組是順序的存儲結構。從列表中,移除并返回特定位置的一項。返回列表中元素個數,與數組的屬性類似。提示端優先使用以上的語法實現。不要忘記在最后返回新的頭引用復雜度分析時間復雜度。假設是列表的長度,時間復雜度是。 這是第三周的練習題,原本應該先發第二周的,因為周末的時候,我的母親大人來看望她的寶貝兒子,哈哈,我得帶她看看廈門這座美麗的城市呀。 這兩天我抓緊整...

    妤鋒シ 評論0 收藏0
  • 利用PHP實現《劍指 offer》鏈表數據結構算法實戰 )

    摘要:一定要認真看分析注釋題目要求題目描述輸入一個鏈表,從尾到頭打印鏈表每個節點的值。分析因為鏈表只有知道當前結點才能知道下一結點,所以不可能直接從后往前打印。 一定要認真看 分析 | 注釋 | 題目要求 Question 1 題目描述:輸入一個鏈表,從尾到頭打印鏈表每個節點的值。 分析:因為鏈表只有知道當前結點才能知道下一結點,所以不可能直接從后往前打印。這種逆序的算法(策略)我們常用棧這...

    hiYoHoo 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<