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

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

這篇具有很好參考價(jià)值的文章主要介紹了[LeetCode]-160. 相交鏈表-141. 環(huán)形鏈表-142.環(huán)形鏈表II-138.隨機(jī)鏈表的復(fù)制。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

160.相交鏈表

?題目

思路

代碼?

141.環(huán)形鏈表

?題目

思路

代碼

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

題目

思路

代碼


160.相交鏈表

160. 相交鏈表 - 力扣(LeetCode)https://leetcode.cn/problems/intersection-of-two-linked-lists/description/

?題目

給你兩個(gè)單鏈表的頭節(jié)點(diǎn)?headA?和?headB?,請(qǐng)你找出并返回兩個(gè)單鏈表相交的起始節(jié)點(diǎn)。如果兩個(gè)鏈表不存在相交節(jié)點(diǎn),返回?null?。

圖示兩個(gè)鏈表在節(jié)點(diǎn)?c1?開(kāi)始相交

[LeetCode]-160. 相交鏈表-141. 環(huán)形鏈表-142.環(huán)形鏈表II-138.隨機(jī)鏈表的復(fù)制,LeetCode刷題分享,leetcode,鏈表,算法

題目數(shù)據(jù)?保證?整個(gè)鏈?zhǔn)浇Y(jié)構(gòu)中不存在環(huán)。

注意,函數(shù)返回結(jié)果后,鏈表必須?保持其原始結(jié)構(gòu)?。

示例:

[LeetCode]-160. 相交鏈表-141. 環(huán)形鏈表-142.環(huán)形鏈表II-138.隨機(jī)鏈表的復(fù)制,LeetCode刷題分享,leetcode,鏈表,算法

輸入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3
輸出:Intersected at '8'
解釋:相交節(jié)點(diǎn)的值為 8 (注意,如果兩個(gè)鏈表相交則不能為 0)。
從各自的表頭開(kāi)始算起,鏈表 A 為 [4,1,8,4,5],鏈表 B 為 [5,6,1,8,4,5]。
在 A 中,相交節(jié)點(diǎn)前有 2 個(gè)節(jié)點(diǎn);在 B 中,相交節(jié)點(diǎn)前有 3 個(gè)節(jié)點(diǎn)。
— 請(qǐng)注意相交節(jié)點(diǎn)的值不為 1,因?yàn)樵阪湵?A 和鏈表 B 之中值為 1 的節(jié)點(diǎn) (A 中第二個(gè)節(jié)點(diǎn)和 B 中第三個(gè)節(jié)點(diǎn)) 是不同的節(jié)點(diǎn)。換句話說(shuō),它們?cè)趦?nèi)存中指向兩個(gè)不同的位置,而鏈表 A 和鏈表 B 中值為 8 的節(jié)點(diǎn) (A 中第三個(gè)節(jié)點(diǎn),B 中第四個(gè)節(jié)點(diǎn)) 在內(nèi)存中指向相同的位置。

思路

?先分別從兩個(gè)單鏈表A、B的頭節(jié)點(diǎn)開(kāi)始遍歷,分別計(jì)算出兩個(gè)單鏈表的長(zhǎng)度lenA、lenB,由于相交節(jié)點(diǎn)后面部分鏈表是共用的,所以長(zhǎng)度差只存在于相交節(jié)點(diǎn)前面部分,因此,我們可以讓較長(zhǎng)的鏈表(可以先假設(shè)A長(zhǎng))先往后遍歷差距步abs(lenA-lenB),再讓A、B鏈表同時(shí)向后遍歷(longlistA=longlistA->next、shortlistB=shortlistB->next),當(dāng)A、B遍歷到相同的節(jié)點(diǎn)時(shí),即longlistA==shortlistB時(shí),同時(shí)到達(dá)相交起始節(jié)點(diǎn),返回longlist或者shortlist均為相交起始節(jié)點(diǎn)。

圖示??

[LeetCode]-160. 相交鏈表-141. 環(huán)形鏈表-142.環(huán)形鏈表II-138.隨機(jī)鏈表的復(fù)制,LeetCode刷題分享,leetcode,鏈表,算法

代碼?

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    struct ListNode* curA=headA;
    struct ListNode* curB=headB;
    int lenA=1,lenB=1;
    while(curA->next)
    {
        curA=curA->next;
        lenA++;
    }
    while(curB->next)
    {
        curB=curB->next;
        lenB++;
    }
    if(curA!=curB)
    return NULL;

int grp=0;
if(lenA>lenB)
grp=lenA-lenB;
else
grp=lenB-lenA;

struct ListNode* longlist=headA,* shortlist = headB;

if(lenA<lenB)
{
    longlist=headB;
    shortlist=headA;
}
//長(zhǎng)的先走差距步
while(grp--)
{
    longlist=longlist->next;
}
while(longlist!=shortlist)
{
    longlist=longlist->next;
    shortlist=shortlist->next;
}
return longlist;

}

141.環(huán)形鏈表

141. 環(huán)形鏈表 - 力扣(LeetCode)https://leetcode.cn/problems/linked-list-cycle/description/

?題目

給你一個(gè)鏈表的頭節(jié)點(diǎn)?head?,判斷鏈表中是否有環(huán)。

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

如果鏈表中存在環(huán)?,則返回?true?。 否則,返回?false?。

示例:

[LeetCode]-160. 相交鏈表-141. 環(huán)形鏈表-142.環(huán)形鏈表II-138.隨機(jī)鏈表的復(fù)制,LeetCode刷題分享,leetcode,鏈表,算法

輸入:head = [3,2,0,-4], pos = 1
輸出:true
解釋:鏈表中有一個(gè)環(huán),其尾部連接到第二個(gè)節(jié)點(diǎn)。

思路

利用快慢指針?lè)ǎ陬^節(jié)點(diǎn)創(chuàng)建兩個(gè)指針fast和slow,從頭節(jié)點(diǎn)向后分別開(kāi)始遍歷,但是fast一次走兩步(fast=fast->next->next),slow一次走一步(slow=slow->next),如果鏈表中有環(huán),沒(méi)有指向NULL的節(jié)點(diǎn),fast和slow進(jìn)入環(huán)后會(huì)無(wú)限循環(huán)遍歷下去,因?yàn)閒ast遍歷速度是slow的兩倍,在環(huán)中,fast和slow總會(huì)遍歷到同一節(jié)點(diǎn),我們就可以添加一個(gè)跳出條件,當(dāng)fast和slow相等時(shí)(fast==slow),證明鏈表中有環(huán),返回true。

圖示??

[LeetCode]-160. 相交鏈表-141. 環(huán)形鏈表-142.環(huán)形鏈表II-138.隨機(jī)鏈表的復(fù)制,LeetCode刷題分享,leetcode,鏈表,算法

代碼

bool hasCycle(struct ListNode *head) {
    struct ListNode* slow=head,* fast=head;

    while(fast&&fast->next)
    {
        slow=slow->next;
        fast=fast->next->next;

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

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

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

題目

給定一個(gè)鏈表的頭節(jié)點(diǎn) ?head?,返回鏈表開(kāi)始入環(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 開(kāi)始)。如果?pos?是?-1,則在該鏈表中沒(méi)有環(huán)。注意:pos?不作為參數(shù)進(jìn)行傳遞,僅僅是為了標(biāo)識(shí)鏈表的實(shí)際情況。

不允許修改?鏈表。

示例:

[LeetCode]-160. 相交鏈表-141. 環(huán)形鏈表-142.環(huán)形鏈表II-138.隨機(jī)鏈表的復(fù)制,LeetCode刷題分享,leetcode,鏈表,算法

輸入:head = [3,2,0,-4], pos = 1
輸出:返回索引為 1 的鏈表節(jié)點(diǎn)
解釋:鏈表中有一個(gè)環(huán),其尾部連接到第二個(gè)節(jié)點(diǎn)。

思路

遇到環(huán)形鏈表問(wèn)題,我們可以先考慮用快慢指針求出相遇點(diǎn),在這道題中,我們要求出鏈表入環(huán)的第一個(gè)節(jié)點(diǎn),我們知道鏈表成環(huán)需要尾節(jié)點(diǎn)指向鏈表中的任意節(jié)點(diǎn),被指向節(jié)點(diǎn)就有了兩個(gè)指向它的節(jié)點(diǎn),我們可以利用求相交節(jié)點(diǎn)的方法求入環(huán)的第一個(gè)節(jié)點(diǎn),類似于上面相交鏈表題,為了創(chuàng)造條件,我們可以斷開(kāi)相遇點(diǎn),創(chuàng)建一個(gè)新節(jié)點(diǎn)newhead,和原節(jié)點(diǎn)head,兩個(gè)節(jié)點(diǎn)帶入上面求相交節(jié)點(diǎn)的題目中,就能求出入環(huán)第一個(gè)節(jié)點(diǎn)了。

[LeetCode]-160. 相交鏈表-141. 環(huán)形鏈表-142.環(huán)形鏈表II-138.隨機(jī)鏈表的復(fù)制,LeetCode刷題分享,leetcode,鏈表,算法文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-744158.html

代碼

  //求相交節(jié)點(diǎn)的函數(shù)
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    struct ListNode* curA=headA;
    struct ListNode* curB=headB;
    int lenA=1,lenB=1;
    while(curA->next)
    {
        curA=curA->next;
        lenA++;
    }
    while(curB->next)
    {
        curB=curB->next;
        lenB++;
    }
    if(curA!=curB)
    return NULL;

int grp=0;
if(lenA>lenB)
grp=lenA-lenB;
else
grp=lenB-lenA;

struct ListNode* longlist=headA,* shortlist = headB;

if(lenA<lenB)
{
    longlist=headB;
    shortlist=headA;
}
//長(zhǎng)的先走差距步
while(grp--)
{
    longlist=longlist->next;
}
while(longlist!=shortlist)
{
    longlist=longlist->next;
    shortlist=shortlist->next;
}
return longlist;
}


struct ListNode *detectCycle(struct ListNode *head) {
    struct ListNode* fast,* slow;
    fast=slow=head;
    while(fast&&fast->next)
    {
        fast=fast->next->next;
        slow=slow->next;
        if(fast==slow)
        {
            struct ListNode* meet=fast;
            //斷開(kāi)相遇點(diǎn)
            struct ListNode* newhead=meet->next;
            meet->next=NULL;
                //找相交節(jié)點(diǎn)
               return getIntersectionNode(newhead,head);
        }
    }
    return NULL;
}

到了這里,關(guān)于[LeetCode]-160. 相交鏈表-141. 環(huán)形鏈表-142.環(huán)形鏈表II-138.隨機(jī)鏈表的復(fù)制的文章就介紹完了。如果您還想了解更多內(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)文章

  • Day4|LeetCode 24. 兩兩交換鏈表中的節(jié)點(diǎn)、19.刪除鏈表的倒數(shù)第N個(gè)節(jié)點(diǎn)、160.鏈表相交、142.環(huán)形鏈表

    Day4|LeetCode 24. 兩兩交換鏈表中的節(jié)點(diǎn)、19.刪除鏈表的倒數(shù)第N個(gè)節(jié)點(diǎn)、160.鏈表相交、142.環(huán)形鏈表

    LeetCode?24. 兩兩交換鏈表中的節(jié)點(diǎn) 題目鏈接:24. 兩兩交換鏈表中的節(jié)點(diǎn) - 力扣(LeetCode) 視頻鏈接:幫你把鏈表細(xì)節(jié)學(xué)清楚! | LeetCode:24. 兩兩交換鏈表中的節(jié)點(diǎn)_嗶哩嗶哩_bilibili 思路 給定一個(gè)鏈表,兩兩交換其中相鄰的節(jié)點(diǎn),并返回交換后的鏈表。你不能只是單純的改變節(jié)

    2024年02月16日
    瀏覽(19)
  • LeetCode.141,142——環(huán)形鏈表,環(huán)形鏈表Ⅱ

    LeetCode.141,142——環(huán)形鏈表,環(huán)形鏈表Ⅱ

    題目如下: 通過(guò)題目中對(duì)于環(huán)形鏈表的大體描述,可以知道,環(huán)形鏈表最后一個(gè)結(jié)點(diǎn)保存了一個(gè)地址,用于返回鏈表中某個(gè)結(jié)點(diǎn)。并且。這個(gè)返回的結(jié)點(diǎn)并不是返回圖中保存數(shù)據(jù)的結(jié)點(diǎn)。而是返回鏈表中任意一個(gè)結(jié)點(diǎn)。即: ? 或者: 題目中給了兩個(gè)要求,分別是: 1. 判斷鏈

    2024年02月10日
    瀏覽(25)
  • 代碼隨想錄第四天|LeetCode24. 兩兩交換鏈表中的節(jié)點(diǎn),LeetCode19.刪除鏈表的倒數(shù)第N個(gè)節(jié)點(diǎn),LeetCode面試題 02.07. 鏈表相交,LeetCode142.環(huán)形鏈表II

    代碼隨想錄第四天|LeetCode24. 兩兩交換鏈表中的節(jié)點(diǎn),LeetCode19.刪除鏈表的倒數(shù)第N個(gè)節(jié)點(diǎn),LeetCode面試題 02.07. 鏈表相交,LeetCode142.環(huán)形鏈表II

    LeetCode24. 兩兩交換鏈表中的節(jié)點(diǎn) 題目鏈接:24. 兩兩交換鏈表中的節(jié)點(diǎn) - 力扣(LeetCode) 思路: 先定義一個(gè)虛擬頭結(jié)點(diǎn)方便操作。 再就是交換相鄰兩個(gè)元素了, 此時(shí)一定要畫圖,不畫圖,操作多個(gè)指針很容易亂,而且要操作的先后順序 初始時(shí),cur指向虛擬頭結(jié)點(diǎn),然后進(jìn)行

    2024年02月09日
    瀏覽(24)
  • 【LeetCode題目詳解】24.兩兩交換鏈表中的節(jié)點(diǎn)19.刪除鏈表的倒數(shù)第N個(gè)節(jié)點(diǎn) 面試題 02.07. 鏈表相交 142.環(huán)形鏈表II day4(補(bǔ))

    【LeetCode題目詳解】24.兩兩交換鏈表中的節(jié)點(diǎn)19.刪除鏈表的倒數(shù)第N個(gè)節(jié)點(diǎn) 面試題 02.07. 鏈表相交 142.環(huán)形鏈表II day4(補(bǔ))

    ? 給定一個(gè)鏈表,兩兩交換其中相鄰的節(jié)點(diǎn),并返回交換后的鏈表。 你不能只是單純的改變節(jié)點(diǎn)內(nèi)部的值,而是需要實(shí)際的進(jìn)行節(jié)點(diǎn)交換。 這道題建議使用 虛擬頭結(jié)點(diǎn) ,這樣會(huì)方便很多,要不然每次針對(duì)頭結(jié)點(diǎn)(沒(méi)有前一個(gè)指針指向頭結(jié)點(diǎn)),還要單獨(dú)處理。 接下來(lái)就是

    2024年02月15日
    瀏覽(20)
  • 每日一練:LeeCode-面試題 02.07. 鏈表相交 【鏈表+迭代】 LeeCode-142. 環(huán)形鏈表 II【鏈表+集合】

    每日一練:LeeCode-面試題 02.07. 鏈表相交 【鏈表+迭代】 LeeCode-142. 環(huán)形鏈表 II【鏈表+集合】

    本文是力扣 每日一練:每日一練:LeeCode-面試題 02.07. 鏈表相交 【鏈表+迭代】 LeeCode-142. 環(huán)形鏈表 II【鏈表+集合】 學(xué)習(xí)與理解過(guò)程,本文僅做學(xué)習(xí)之用,對(duì)本題感興趣的小伙伴可以出門左拐 LeeCode-面試題 02.07. 鏈表相交LeeCode-面試題 02.07. 鏈表相交 與 LeeCode-142. 環(huán)形鏈表 II 給

    2024年03月17日
    瀏覽(20)
  • day4_24交換鏈表節(jié)點(diǎn)_19刪除節(jié)點(diǎn)_面鏈表相交_142環(huán)形鏈表II

    day4_24交換鏈表節(jié)點(diǎn)_19刪除節(jié)點(diǎn)_面鏈表相交_142環(huán)形鏈表II

    題目鏈接 方案一:自己的方案 奇偶節(jié)點(diǎn),思路比代碼隨想錄中的更直觀一些,但是需要進(jìn)行分類討論,設(shè)置的輔助節(jié)點(diǎn)也多一些。 方案二:代碼隨想錄 直接上圖: 需要注意的是要保存1,2,3節(jié)點(diǎn),因?yàn)樵诟淖僴ext指針時(shí)很容易將鏈表斷開(kāi)。 題目鏈接 方案一: 兩邊掃描,第一

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

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

    題目鏈接 ?? LeetCode 142.環(huán)形鏈表II?? 給定一個(gè)鏈表的頭節(jié)點(diǎn) head ,返回鏈表開(kāi)始入環(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月12日
    瀏覽(18)
  • leetcode 142 環(huán)形鏈表II

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

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

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

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

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

    2024年02月07日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包