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

單鏈表OJ題:LeetCode--142.環(huán)形鏈表Ⅱ(判斷第一次入環(huán)的節(jié)點(diǎn))

這篇具有很好參考價(jià)值的文章主要介紹了單鏈表OJ題:LeetCode--142.環(huán)形鏈表Ⅱ(判斷第一次入環(huán)的節(jié)點(diǎn))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

朋友們、伙計(jì)們,我們又見(jiàn)面了,本期來(lái)給大家解讀一下LeetCode中第142道單鏈表OJ題,如果看完之后對(duì)你有一定的啟發(fā),那么請(qǐng)留下你的三連,祝大家心想事成!

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-475688.html

數(shù)據(jù)結(jié)構(gòu)與算法專欄數(shù)據(jù)結(jié)構(gòu)與算法

個(gè)? 人? 主? 頁(yè)?:stackY、

C 語(yǔ) 言 專 欄C語(yǔ)言:從入門到精通

單鏈表OJ題:LeetCode--142.環(huán)形鏈表Ⅱ(判斷第一次入環(huán)的節(jié)點(diǎn))

LeetCode--142.環(huán)形鏈表Ⅱ:?https://leetcode.cn/problems/linked-list-cycle-ii/description/

目錄

1.題目介紹

2.實(shí)例演示

3.解題思路

4.思路驗(yàn)證?

5.其他解題方法


1.題目介紹

給定一個(gè)鏈表的頭節(jié)點(diǎn) ?head?,返回鏈表開始入環(huán)的第一個(gè)節(jié)點(diǎn)。?如果鏈表無(wú)環(huán),則返回?null。

如果鏈表中有某個(gè)節(jié)點(diǎn),可以通過(guò)連續(xù)跟蹤 next 指針再次到達(dá),則鏈表中存在環(huán)。 為了表示給定鏈表中的環(huán),評(píng)測(cè)系統(tǒng)內(nèi)部使用整數(shù) pos 來(lái)表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。如果 pos 是 -1,則在該鏈表中沒(méi)有環(huán)。注意:pos 不作為參數(shù)進(jìn)行傳遞,僅僅是為了標(biāo)識(shí)鏈表的實(shí)際情況。不允許修改 鏈表。

單鏈表OJ題:LeetCode--142.環(huán)形鏈表Ⅱ(判斷第一次入環(huán)的節(jié)點(diǎn))

2.實(shí)例演示

單鏈表OJ題:LeetCode--142.環(huán)形鏈表Ⅱ(判斷第一次入環(huán)的節(jié)點(diǎn))

3.解題思路

小編在這里給大家推薦比較簡(jiǎn)單的解題思路,同樣的都是使用快慢指針的,我們先來(lái)講具體的解題思路,后面會(huì)驗(yàn)證這種方法的正確性:

????????同樣的還是設(shè)置快慢指針,慢指針一次走一步,快指針一次走兩步,同樣的我們先來(lái)判斷鏈表是否有環(huán)(如何判斷鏈表有環(huán)大家可以去看LeetCode:141.環(huán)形鏈表這篇博客,里面包含了具體解題思路),在判斷是否有環(huán)之后呢,我們要找到第一次入環(huán)的節(jié)點(diǎn),那這個(gè)就比較麻煩了,該怎么找呢?小編在這里給大家提供一個(gè)簡(jiǎn)單的解法:記錄環(huán)中快慢指針相遇的節(jié)點(diǎn)(meet),然后讓一個(gè)指針從鏈表的頭(head)開始走,一次都走一步,當(dāng)meet和head相遇時(shí)它們就是第一次入環(huán)的節(jié)點(diǎn)。

代碼演示:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode *detectCycle(struct ListNode *head) {
    //設(shè)置快慢指針
    struct ListNode* slow = head;
    struct ListNode* fast = head;
    //快慢指針的相遇節(jié)點(diǎn)
    struct ListNode* meet = NULL;

    //判斷是否有環(huán)
    while(fast && fast->next)
    {
        fast = fast->next->next;
        slow = slow->next;
        //若有環(huán)則記錄快慢指針的相遇節(jié)點(diǎn)
        if(fast == slow)
        {
            meet = slow;
            //找第一次入環(huán)的節(jié)點(diǎn)
            while(meet != head)
            {
                //一次都走一步
                meet = meet->next;
                head = head->next;
            }

            return meet;
        }
    }
    //無(wú)環(huán)則返回NULL
    return NULL;
}

4.思路驗(yàn)證?

要求環(huán)形鏈表第一次入環(huán)的節(jié)點(diǎn),我們使用的這種快慢指針的方法是很簡(jiǎn)單的,也是很巧妙的,這種方法具體是怎么實(shí)現(xiàn)的,讓我們接著往下來(lái)看:

我們假設(shè)環(huán)的長(zhǎng)度為C,鏈表的頭到第一次入環(huán)節(jié)點(diǎn)的距離為L(zhǎng),第一次入環(huán)的節(jié)點(diǎn)到相遇點(diǎn)的距離為X。

單鏈表OJ題:LeetCode--142.環(huán)形鏈表Ⅱ(判斷第一次入環(huán)的節(jié)點(diǎn))

慢指針在這里有一個(gè)分析問(wèn)題:slow有沒(méi)有可能在環(huán)里面轉(zhuǎn)了好幾圈快指針才追上?

答案是肯定不可能,因?yàn)榭熘羔樀乃俣仁锹羔樀?倍,不存在錯(cuò)過(guò)的情況,所以慢指針不存在走好幾圈才能被快指針追上的情況。

很多老鐵在這里驗(yàn)證的時(shí)候使用了一種錯(cuò)誤的驗(yàn)證方法:

慢指針slow走的路程是:L + X

快指針fast走的路程是:L + X + C

那么就有一種對(duì)應(yīng)的關(guān)系:2 * (L + X) =? L + X + C

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?L = C - X

這種方法有一個(gè)弊端,比如一個(gè)環(huán)形鏈表前面進(jìn)環(huán)的路程(L)非常的長(zhǎng),而環(huán)(C)又非常的小,那這就出現(xiàn)問(wèn)題了:

單鏈表OJ題:LeetCode--142.環(huán)形鏈表Ⅱ(判斷第一次入環(huán)的節(jié)點(diǎn))

所以呢我們可以將這種特殊的情況考慮進(jìn)去,那么我們應(yīng)該先算快指針fast走的路程:

快指針fast走的路程:L + n * C + X(n為慢指針進(jìn)環(huán)之前快指針在環(huán)里面走過(guò)的圈數(shù))

慢指針slow走的路程是:L + X

那么就有一種對(duì)應(yīng)的關(guān)系:?2 * (L + X) =? L + X + n * C

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?L = n * C - X

那么這樣解釋起來(lái)就好多了,相遇節(jié)點(diǎn)到第一次入環(huán)的節(jié)點(diǎn)的距離為C - X

頭節(jié)點(diǎn)到第一次入環(huán)節(jié)點(diǎn)的距離為L(zhǎng),那么根據(jù)?L = n * C - X這個(gè)對(duì)應(yīng)關(guān)系,就可以推出從相遇節(jié)點(diǎn)每次走一步,頭指針每一次走一步,當(dāng)它們兩個(gè)相遇的時(shí)候就是這個(gè)環(huán)形鏈表第一次入環(huán)的節(jié)點(diǎn)。

單鏈表OJ題:LeetCode--142.環(huán)形鏈表Ⅱ(判斷第一次入環(huán)的節(jié)點(diǎn))

?

5.其他解題方法

除了上面我們驗(yàn)證的這個(gè)方法外,還有另外的一種方法,小編在這里只說(shuō)思路,感興趣的老鐵可以自己嘗試一下:

分割環(huán)形鏈表法:

可以記錄快慢指針的相遇節(jié)點(diǎn),然后以這個(gè)相遇點(diǎn)為起點(diǎn),保存并記錄相遇節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn),然后將相遇節(jié)點(diǎn)和它的下一個(gè)節(jié)點(diǎn)斷開鏈接,將這個(gè)環(huán)一分為二,這時(shí)就轉(zhuǎn)換成了鏈表相交的問(wèn)題。

一個(gè)鏈表是從頭開始,另一個(gè)鏈表的頭是從相遇點(diǎn)的下一個(gè)節(jié)點(diǎn),那么這兩個(gè)鏈表的相交節(jié)點(diǎn)就是第一次入環(huán)的節(jié)點(diǎn)。

單鏈表OJ題:LeetCode--142.環(huán)形鏈表Ⅱ(判斷第一次入環(huán)的節(jié)點(diǎn))

感興趣的老鐵可以自己動(dòng)手寫一下完整的代碼。?

朋友們、伙計(jì)們,美好的時(shí)光總是短暫的,我們本期的的分享就到此結(jié)束,最后看完別忘了留下你們彌足珍貴的三連喔,感謝大家的支持!

?

?

到了這里,關(guān)于單鏈表OJ題:LeetCode--142.環(huán)形鏈表Ⅱ(判斷第一次入環(huán)的節(jié)點(diǎn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2024年02月14日
    瀏覽(20)
  • LeetCode[141] [142] 環(huán)形鏈表I II

    141. 環(huán)形鏈表 - 力扣(LeetCode) 142. 環(huán)形鏈表 II - 力扣(LeetCode) 題解: 快慢指針題 從head開始,一個(gè)快指針,一次前進(jìn)兩步,一個(gè)慢指針,一次走一步 如果沒(méi)有環(huán),則快指針首先到達(dá)鏈表尾部, 如果有環(huán),快慢指針肯定能相遇即fast=slow 141代碼: 對(duì)于142需要環(huán)的起點(diǎn),需要

    2024年02月04日
    瀏覽(23)
  • [LeetCode]-160. 相交鏈表-141. 環(huán)形鏈表-142.環(huán)形鏈表II-138.隨機(jī)鏈表的復(fù)制

    [LeetCode]-160. 相交鏈表-141. 環(huán)形鏈表-142.環(huán)形鏈表II-138.隨機(jī)鏈表的復(fù)制

    目錄 160.相交鏈表 ?題目 思路 代碼? 141.環(huán)形鏈表 ?題目 思路 代碼 142.環(huán)形鏈表II 題目 思路 代碼 160. 相交鏈表 - 力扣(LeetCode) https://leetcode.cn/problems/intersection-of-two-linked-lists/description/ 給你兩個(gè)單鏈表的頭節(jié)點(diǎn)? headA ?和? headB ?,請(qǐng)你找出并返回兩個(gè)單鏈表相交的起始節(jié)點(diǎn)

    2024年02月05日
    瀏覽(48)
  • leetcode 141.環(huán)形鏈表 I - 142.環(huán)形鏈表 II 代碼及指針相遇證明問(wèn)題

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

    給你一個(gè)鏈表的頭節(jié)點(diǎn) head ,判斷鏈表中是否有環(huán)。如果鏈表中有某個(gè)節(jié)點(diǎn),可以通過(guò)連續(xù)跟蹤 next 指針再次到達(dá),則鏈表中存在環(huán)。 如果鏈表中存在環(huán) ,則返回 true 。 否則,返回 false 。 思路: 快慢指針問(wèn)題 。我們可以聲明一個(gè) fast 指針(一次走兩步),聲明一個(gè) slow

    2024年02月12日
    瀏覽(23)
  • 代碼隨想錄 Leetcode142. 環(huán)形鏈表 II

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

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

    2024年01月19日
    瀏覽(24)
  • 【刷題專欄—突破思維】LeetCode 142. 環(huán)形鏈表 II

    【刷題專欄—突破思維】LeetCode 142. 環(huán)形鏈表 II

    前言 :本篇博客將講解三個(gè)OJ題,前兩個(gè)作為鋪墊,最后完成環(huán)形鏈表的節(jié)點(diǎn)的尋找 題目鏈接:LeetCode—相交鏈表 題目描述: 給你兩個(gè)單鏈表的頭節(jié)點(diǎn) headA 和 headB ,請(qǐng)你找出并返回兩個(gè)單鏈表相交的起始節(jié)點(diǎn)。如果兩個(gè)鏈表不存在相交節(jié)點(diǎn),返回 null 。 圖示兩個(gè)鏈表在節(jié)

    2024年02月05日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包