国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

leetcode 141.環(huán)形鏈表 I - 142.環(huán)形鏈表 II 代碼及指針相遇證明問題

這篇具有很好參考價值的文章主要介紹了leetcode 141.環(huán)形鏈表 I - 142.環(huán)形鏈表 II 代碼及指針相遇證明問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?? 環(huán)形鏈表 I 題目描述

給你一個鏈表的頭節(jié)點 head ,判斷鏈表中是否有環(huán)。如果鏈表中有某個節(jié)點,可以通過連續(xù)跟蹤 next 指針再次到達,則鏈表中存在環(huán)。
如果鏈表中存在環(huán) ,則返回 true 。 否則,返回 false
leetcode 141.環(huán)形鏈表 I - 142.環(huán)形鏈表 II 代碼及指針相遇證明問題,刷題,leetcode,鏈表,算法,學習
思路:快慢指針問題。我們可以聲明一個 fast 指針(一次走兩步),聲明一個 slow 指針(一次走一步)。如果鏈表中存在環(huán),那么 fast 指針和 slow 指針就會相遇,如果相遇則代表有環(huán),否則 fast 指針會結束代表沒環(huán)。

?? 為什么快指針走兩步,慢指針走一步可以相遇?

圖:
leetcode 141.環(huán)形鏈表 I - 142.環(huán)形鏈表 II 代碼及指針相遇證明問題,刷題,leetcode,鏈表,算法,學習
leetcode 141.環(huán)形鏈表 I - 142.環(huán)形鏈表 II 代碼及指針相遇證明問題,刷題,leetcode,鏈表,算法,學習

假設 slow 進環(huán)后,fastslow 距離是 N N N。這時候 fast 開始追擊 slow ,fast 一次走兩步,slow一次走一步,他們之間的距離每次縮小 1 1 1N、N-1、N-2、...2、10。最終他們相遇了,所以結論是肯定會相遇,因為他們的距離每次縮小 1 1 1

?? 那快指針一次走三步,慢指針走一步可以相遇嗎?

leetcode 141.環(huán)形鏈表 I - 142.環(huán)形鏈表 II 代碼及指針相遇證明問題,刷題,leetcode,鏈表,算法,學習
還是假設 slow 進環(huán)后,fastslow 距離是 N N N。這時候 fast 一次走三步,slow 一次走一步,他們之間的距離每次縮小 2 2 2。

  1. N N N 是偶數(shù)的情況:N、N-2N-4、...4、2、0 相遇追上了。
  2. N N N 是奇數(shù)的情況:N、N-2、N-4、...、3、1、-1。這里 -1 意味著剛好錯過了,但是此時 fast 是要超出 slow 一步,再假設環(huán)的大小是 C C C。那么現(xiàn)在 fastslow 的距離剛好是 C ? 1 C - 1 C?1步。又分為兩種情況:
    • 如果 C ? 1 C - 1 C?1 是偶數(shù)的話,那么 fastslow 就可以相遇。
    • 如果 C ? 1 C - 1 C?1 是奇數(shù)的話,那么 fast 就會重復上面是奇數(shù)的情況,永遠不會相遇。

結論:當 fast 一次走三步,slow 一次走一步,不一定可以相遇。
leetcode 141.環(huán)形鏈表 I - 142.環(huán)形鏈表 II 代碼及指針相遇證明問題,刷題,leetcode,鏈表,算法,學習


leetcode鏈接:141.環(huán)形鏈表 I

?? 代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-529663.html

bool hasCycle(struct ListNode *head) {
    struct ListNode * slow = head;
    struct ListNode * fast = head;
    
    // 考慮沒有環(huán)的情況下,奇數(shù)和偶數(shù)個鏈表 fast 結束條件不同
    while (fast && fast->next) {
        fast = fast->next->next;
        slow = slow->next;

        if (fast == slow) {
            return true;
        }
    }

    return false;
}

?? 環(huán)形鏈表 II 題目描述

給定一個鏈表的頭節(jié)點 head ,返回鏈表開始入環(huán)的第一個節(jié)點。 如果鏈表無環(huán),則返回 NULL。不允許修改鏈表。
結論是當一個指針從 fastslow 的相遇點 meet 開始走,一個指針從 head 位置開始走,最終 meethead 會在入環(huán)點相遇。
leetcode 141.環(huán)形鏈表 I - 142.環(huán)形鏈表 II 代碼及指針相遇證明問題,刷題,leetcode,鏈表,算法,學習

?? 為什么一個指針從相遇點走,一個指針從頭走,他倆會在入環(huán)點相遇呢?

假設 head 到入環(huán)點的距離是 L L L ,入環(huán)點到相遇點的距離是 X X X,而環(huán)的大小是 C C C。
首先 slow 進環(huán)之后,fast 在一圈之內(nèi),一定可以追上 slow!因為追擊的過程他們距離每次縮小1,首先排除錯過,而 slow 進環(huán) fast 與其最大長度也只是 C ? 1 C - 1 C?1,所以 slow 最多走不到半圈,fast 就會追上。
slow 走的路程: L + X L + X L+X
fast 走的路程: L + N ? C + X L + N * C + X L+N?C+X? ? ( N > = 1 ) (N>=1) (N>=1) 假設 slow 在進環(huán)前,fast 在環(huán)里轉了 N N N 圈。

所以 fast 走了 slow 2倍。

  • 2 ? ( L + X ) = L + N ? C + X 2 * (L + X) = L + N * C + X 2?(L+X)=L+N?C+X
  • L + X = N ? C L + X = N * C L+X=N?C
  • L = N ? C ? X L = N * C - X L=N?C?X

所以 L L L 的距離就是繞了 N N N 圈之后到達 meet 的距離在減去 X X X 的距離,就是入環(huán)點。
結論:一個指針從 meet 開始走,一個指針從 head 開始走,他們會在入環(huán)點相遇。
leetcode 141.環(huán)形鏈表 I - 142.環(huán)形鏈表 II 代碼及指針相遇證明問題,刷題,leetcode,鏈表,算法,學習


leetcode鏈接:142.環(huán)形鏈表 II

?? 代碼:

struct ListNode *detectCycle(struct ListNode *head) {
    struct ListNode * slow = head;
    struct ListNode * fast = head;
    
    // 考慮沒有環(huán)的情況下,奇數(shù)和偶數(shù)個鏈表 fast 結束條件不同
    while (fast && fast->next) {
        fast = fast->next->next;
        slow = slow->next;

        if (fast == slow) {
             struct ListNode * meet = fast;
             while (head != meet) {
                 head = head->next;
                 meet = meet->next;
             }

             return meet;
        }
    }

    return NULL;
}

到了這里,關于leetcode 141.環(huán)形鏈表 I - 142.環(huán)形鏈表 II 代碼及指針相遇證明問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 代碼隨想錄 Leetcode142. 環(huán)形鏈表 II

    代碼隨想錄 Leetcode142. 環(huán)形鏈表 II

    ? ? ? ? 雙指針解決百分之99的鏈表題

    2024年01月19日
    瀏覽(24)
  • 【雙指針】142. 環(huán)形鏈表 II

    判斷是否有環(huán) https://blog.csdn.net/qq_44653420/article/details/131720199?spm=1001.2014.3001.5501 快慢指針相遇之后 然后在head處設置一個指針 相遇節(jié)點處設置一個指針 兩個指針每次移動一步 最后相遇 相遇就是環(huán)入口

    2024年02月16日
    瀏覽(19)
  • 鏈表專題1—24. 兩兩交換鏈表中的節(jié)點 234.回文鏈表 143.重排鏈表 141.環(huán)形鏈表 142.環(huán)形鏈表II 160.鏈表相交 C++實現(xiàn)

    鏈表專題1—24. 兩兩交換鏈表中的節(jié)點 234.回文鏈表 143.重排鏈表 141.環(huán)形鏈表 142.環(huán)形鏈表II 160.鏈表相交 C++實現(xiàn)

    迭代法,時間復雜度: O ( n ) O(n) O ( n ) , 空間復雜度: O ( 1 ) O(1) O ( 1 ) 時間復雜度、空間復雜度: O ( n ) O(n) O ( n ) 止位置時,慢指針就在鏈表中間位置。 同時用pre記錄慢指針指向節(jié)點的前一個節(jié)點,用來分割鏈表,將鏈表分為前后均等兩部分,如果鏈表長度是奇數(shù),那么

    2024年02月12日
    瀏覽(18)
  • 環(huán)形鏈表 II(力扣142)(快慢指針)

    環(huán)形鏈表 II(力扣142)(快慢指針)

    142.環(huán)形鏈表—力扣 給定一個鏈表的頭節(jié)點 ?head?,返回鏈表開始入環(huán)的第一個節(jié)點。?如果鏈表無環(huán),則返回?null。 如果鏈表中有某個節(jié)點,可以通過連續(xù)跟蹤 next 指針再次到達,則鏈表中存在環(huán)。 為了表示給定鏈表中的環(huán),評測系統(tǒng)內(nèi)部使用整數(shù) pos 來表示鏈表尾連接到

    2023年04月25日
    瀏覽(22)
  • LeetCode 142.環(huán)形鏈表II

    LeetCode 142.環(huán)形鏈表II

    題目鏈接 ?? LeetCode 142.環(huán)形鏈表II?? 給定一個鏈表的頭節(jié)點 head ,返回鏈表開始入環(huán)的第一個節(jié)點。 如果鏈表無環(huán),則返回 null。 如果鏈表中有某個節(jié)點,可以通過連續(xù)跟蹤 next 指針再次到達,則鏈表中存在環(huán)。 為了表示給定鏈表中的環(huán),評測系統(tǒng)內(nèi)部使用整數(shù) pos 來表示

    2024年02月12日
    瀏覽(18)
  • leetcode 142 環(huán)形鏈表II

    leetcode 142 環(huán)形鏈表II

    給定一個鏈表的頭節(jié)點 head ,返回鏈表開始入環(huán)的第一個節(jié)點。 如果鏈表無環(huán),則返回 null。 如果鏈表中有某個節(jié)點,可以通過連續(xù)跟蹤 next 指針再次到達,則鏈表中存在環(huán)。 為了表示給定鏈表中的環(huán),評測系統(tǒng)內(nèi)部使用整數(shù) pos 來表示鏈表尾連接到鏈表中的位置(索引從

    2024年02月01日
    瀏覽(22)
  • 【Leetcode】142.環(huán)形鏈表II

    【Leetcode】142.環(huán)形鏈表II

    題意: 給定一個鏈表,返回鏈表開始入環(huán)的第一個節(jié)點。 如果鏈表無環(huán),則返回 null。 為了表示給定鏈表中的環(huán),使用整數(shù) pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有環(huán)。 說明 :不允許修改給定的鏈表。 一開始我是這么寫的

    2024年02月16日
    瀏覽(19)
  • LeetCode:142. 環(huán)形鏈表 II

    LeetCode:142. 環(huán)形鏈表 II

    ??道阻且長,行則將至。?? ??算法,不如說它是一種思考方式?? 算法專欄: ????123 題目描述 :給定一個鏈表的頭節(jié)點 head ,返回鏈表開始 入環(huán)的第一個節(jié)點 。 如果鏈表無環(huán),則返回 null 。 如果鏈表中有某個節(jié)點,可以通過連續(xù)跟蹤 next 指針再次到達,則鏈表中存在

    2024年02月07日
    瀏覽(21)
  • LeetCode刷題:142. 環(huán)形鏈表 II

    LeetCode刷題:142. 環(huán)形鏈表 II

    題目: 是否獨立解決: 否,參考了解題思路解決問題,思考了用快慢指針,棧,統(tǒng)計鏈表數(shù)量定位尾巴節(jié)點(因為是環(huán)形鏈表所以是死循環(huán),鏈表數(shù)量用while循環(huán)統(tǒng)計不出來)都沒解決 解題思路:這題其實和環(huán)形鏈表一樣的解題思路,用哈希set將數(shù)據(jù)都存儲進去,如果發(fā)現(xiàn)

    2024年01月21日
    瀏覽(15)
  • ?LeetCode解法匯總142. 環(huán)形鏈表 II

    ?LeetCode解法匯總142. 環(huán)形鏈表 II

    https://github.com/September26/java-algorithms 給定一個鏈表的頭節(jié)點 ? head ?,返回鏈表開始入環(huán)的第一個節(jié)點。? 如果鏈表無環(huán),則返回? null 。 如果鏈表中有某個節(jié)點,可以通過連續(xù)跟蹤? next ?指針再次到達,則鏈表中存在環(huán)。 為了表示給定鏈表中的環(huán),評測系統(tǒng)內(nèi)部使用整數(shù)?

    2024年02月14日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包