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

【數(shù)據(jù)結(jié)構(gòu)】[LeetCode138. 復(fù)制帶隨機(jī)指針的鏈表]

這篇具有很好參考價(jià)值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)】[LeetCode138. 復(fù)制帶隨機(jī)指針的鏈表]。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一.問(wèn)題描述

給你一個(gè)長(zhǎng)度為?n?的鏈表,每個(gè)節(jié)點(diǎn)包含一個(gè)額外增加的隨機(jī)指針?random?,該指針可以指向鏈表中的任何節(jié)點(diǎn)或空節(jié)點(diǎn)。

構(gòu)造這個(gè)鏈表的?深拷貝。?深拷貝應(yīng)該正好由?n?個(gè)?全新?節(jié)點(diǎn)組成,其中每個(gè)新節(jié)點(diǎn)的值都設(shè)為其對(duì)應(yīng)的原節(jié)點(diǎn)的值。新節(jié)點(diǎn)的?next?指針和?random?指針也都應(yīng)指向復(fù)制鏈表中的新節(jié)點(diǎn),并使原鏈表和復(fù)制鏈表中的這些指針能夠表示相同的鏈表狀態(tài)。復(fù)制鏈表中的指針都不應(yīng)指向原鏈表中的節(jié)點(diǎn)?。

例如,如果原鏈表中有?X?和?Y?兩個(gè)節(jié)點(diǎn),其中?X.random --> Y?。那么在復(fù)制鏈表中對(duì)應(yīng)的兩個(gè)節(jié)點(diǎn)?x?和?y?,同樣有?x.random --> y?。

返回復(fù)制鏈表的頭節(jié)點(diǎn)。

用一個(gè)由?n?個(gè)節(jié)點(diǎn)組成的鏈表來(lái)表示輸入/輸出中的鏈表。每個(gè)節(jié)點(diǎn)用一個(gè)?[val, random_index]?表示:

  • val:一個(gè)表示?Node.val?的整數(shù)。
  • random_index:隨機(jī)指針指向的節(jié)點(diǎn)索引(范圍從?0?到?n-1);如果不指向任何節(jié)點(diǎn),則為??null?。

你的代碼??接受原鏈表的頭節(jié)點(diǎn)?head?作為傳入?yún)?shù)。

OJ鏈接

二.思路分析

1.拷貝結(jié)點(diǎn)

首先拷貝結(jié)點(diǎn),并且將拷貝的結(jié)點(diǎn)鏈接到被拷貝結(jié)點(diǎn)的后一個(gè)。

【數(shù)據(jù)結(jié)構(gòu)】[LeetCode138. 復(fù)制帶隨機(jī)指針的鏈表]

?代碼


struct Node 
{
    int val;
    struct Node *next;
    struct Node *random;
};

typedef struct Node Node;
struct Node* copyRandomList(struct Node* head) 
{
    Node* cur = head;
    while(cur)
    {
        Node* tmp = (Node*)malloc(sizeof(Node));
        tmp->val = cur->val;
        tmp->next = cur->next;
        cur->next = tmp;

        //迭代
        cur = tmp->next;
    }
	

}

2.將random指向相應(yīng)位置

當(dāng)老結(jié)點(diǎn)random指向NULL時(shí),新結(jié)點(diǎn)的random也指向NULL。
否則,將新結(jié)點(diǎn)的random指向老結(jié)點(diǎn)的random的下一個(gè),即為新結(jié)點(diǎn)應(yīng)指向的結(jié)點(diǎn)。

【數(shù)據(jù)結(jié)構(gòu)】[LeetCode138. 復(fù)制帶隨機(jī)指針的鏈表]

【數(shù)據(jù)結(jié)構(gòu)】[LeetCode138. 復(fù)制帶隨機(jī)指針的鏈表]?

代碼?

    cur = head;
    while(cur)
    {
        if(cur->random == NULL)
        {
            cur->next->random = NULL;
        }
        else
        {
            cur->next->random = cur->random->next;
        }

        //迭代
        cur = cur->next->next;
    }

3.鏈接新鏈表,恢復(fù)原鏈表

將新malloc的結(jié)點(diǎn)尾插進(jìn)入新鏈表,恢復(fù)原鏈表的鏈接關(guān)系

【數(shù)據(jù)結(jié)構(gòu)】[LeetCode138. 復(fù)制帶隨機(jī)指針的鏈表]

代碼

    //鏈接新鏈表,恢復(fù)原鏈表
    Node* NewListHead = NULL;
    Node* NewListTail = NULL;

    cur = head;
    while(cur)
    {
        Node* newnode = cur->next;
        Node* next = newnode->next;

        if(NewListHead == NULL)
        {
            NewListHead = NewListTail = newnode;
        }
        else
        {
            NewListTail->next = newnode;
            NewListTail = newnode;

            cur->next = next;
        }

        //迭代
        cur = next;
    }

    return NewListHead;

?三.完整代碼

struct Node {
    int val;
    struct Node *next;
    struct Node *random;
};

typedef struct Node Node;
struct Node* copyRandomList(struct Node* head)
{
    Node* cur = head;
    //拷貝結(jié)點(diǎn)
    while (cur)
    {
        Node* tmp = (Node*)malloc(sizeof(Node));
        tmp->val = cur->val;
        tmp->next = cur->next;
        cur->next = tmp;

        //迭代
        cur = tmp->next;
    }

    //鏈接random
    cur = head;
    while (cur)
    {
        if (cur->random == NULL)
        {
            cur->next->random = NULL;
        }
        else
        {
            cur->next->random = cur->random->next;
        }

        //迭代
        cur = cur->next->next;
    }

    //鏈接新鏈表,恢復(fù)原鏈表
    Node* NewListHead = NULL;
    Node* NewListTail = NULL;

    cur = head;
    while (cur)
    {
        Node* newnode = cur->next;
        Node* next = newnode->next;

        if (NewListHead == NULL)
        {
            NewListHead = NewListTail = newnode;
        }
        else
        {
            NewListTail->next = newnode;
            NewListTail = newnode;

            cur->next = next;
        }

        //迭代
        cur = next;
    }

    return NewListHead;
}

四.提交結(jié)果

【數(shù)據(jù)結(jié)構(gòu)】[LeetCode138. 復(fù)制帶隨機(jī)指針的鏈表]

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

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)】[LeetCode138. 復(fù)制帶隨機(jī)指針的鏈表]的文章就介紹完了。如果您還想了解更多內(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做題筆記138. 復(fù)制帶隨機(jī)指針的鏈表

    給你一個(gè)長(zhǎng)度為?n?的鏈表,每個(gè)節(jié)點(diǎn)包含一個(gè)額外增加的隨機(jī)指針?random?,該指針可以指向鏈表中的任何節(jié)點(diǎn)或空節(jié)點(diǎn)。 構(gòu)造這個(gè)鏈表的?深拷貝。?深拷貝應(yīng)該正好由?n?個(gè)?全新?節(jié)點(diǎn)組成,其中每個(gè)新節(jié)點(diǎn)的值都設(shè)為其對(duì)應(yīng)的原節(jié)點(diǎn)的值。新節(jié)點(diǎn)的?next?指針和?random?

    2024年02月07日
    瀏覽(32)
  • 【數(shù)據(jù)結(jié)構(gòu)OJ題】復(fù)制帶隨機(jī)指針的鏈表

    【數(shù)據(jù)結(jié)構(gòu)OJ題】復(fù)制帶隨機(jī)指針的鏈表

    原題鏈接:https://leetcode.cn/problems/copy-list-with-random-pointer/description/ 目錄 1. 題目描述 2. 思路分析 3. 代碼實(shí)現(xiàn) 此題可以分三步進(jìn)行: 1. 拷貝鏈表的每一個(gè)結(jié)點(diǎn),拷貝的結(jié)點(diǎn)先鏈接到被拷貝結(jié)點(diǎn)的后面。 2. 復(fù)制隨機(jī)指針的鏈接:拷貝結(jié)點(diǎn)的隨機(jī)指針指向被拷貝結(jié)點(diǎn)隨機(jī)指針的下

    2024年02月12日
    瀏覽(310)
  • 【數(shù)據(jù)結(jié)構(gòu)】?jī)蓛山粨Q鏈表 && 復(fù)制帶隨機(jī)指針的鏈表

    【數(shù)據(jù)結(jié)構(gòu)】?jī)蓛山粨Q鏈表 && 復(fù)制帶隨機(jī)指針的鏈表

    給你一個(gè)鏈表,兩兩交換其中相鄰的節(jié)點(diǎn),并返回交換后鏈表的頭節(jié)點(diǎn)。你必須在不修改節(jié)點(diǎn)內(nèi)部的值的情況下完成本題(即,只能進(jìn)行節(jié)點(diǎn)交換)。 使用一個(gè)棧S來(lái)存儲(chǔ)相鄰兩個(gè)節(jié)點(diǎn)即可 給你一個(gè)長(zhǎng)度為 n 的鏈表,每個(gè)節(jié)點(diǎn)包含一個(gè)額外增加的隨機(jī)指針 random ,該指針可以

    2024年04月15日
    瀏覽(101)
  • 138. 復(fù)制帶隨機(jī)指針的鏈表

    138. 復(fù)制帶隨機(jī)指針的鏈表

    給你一個(gè)長(zhǎng)度為 n 的鏈表,每個(gè)節(jié)點(diǎn)包含一個(gè)額外增加的隨機(jī)指針 random ,該指針可以指向鏈表中的任何節(jié)點(diǎn)或空節(jié)點(diǎn)。 構(gòu)造這個(gè)鏈表的 深拷貝。 深拷貝應(yīng)該正好由 n 個(gè) 全新 節(jié)點(diǎn)組成,其中每個(gè)新節(jié)點(diǎn)的值都設(shè)為其對(duì)應(yīng)的原節(jié)點(diǎn)的值。新節(jié)點(diǎn)的 next 指針和 random 指針也都應(yīng)

    2024年02月13日
    瀏覽(93)
  • 【數(shù)據(jù)結(jié)構(gòu)和算法初階(C語(yǔ)言)】復(fù)雜鏈表(隨機(jī)指針,隨機(jī)鏈表的復(fù)制)題目詳解+鏈表順序表結(jié)尾

    【數(shù)據(jù)結(jié)構(gòu)和算法初階(C語(yǔ)言)】復(fù)雜鏈表(隨機(jī)指針,隨機(jī)鏈表的復(fù)制)題目詳解+鏈表順序表結(jié)尾

    目錄 ?1.隨機(jī)鏈表的復(fù)制 1.2題目描述? 1.3題目分析 1.4解題: 2.順序表和鏈表對(duì)比 2.1cpu高速緩存利用率 3.結(jié)語(yǔ) 一個(gè)長(zhǎng)度為? n ?的鏈表,每個(gè)節(jié)點(diǎn)包含一個(gè)額外增加的隨機(jī)指針? random ? 該指針可以指向鏈表中的任何節(jié)點(diǎn)或空節(jié)點(diǎn)。? ? ? ? 構(gòu)造這個(gè)鏈表的? 深拷貝 。?深拷貝

    2024年03月10日
    瀏覽(94)
  • 138. 復(fù)制帶隨機(jī)指針的鏈表(深拷貝)題解

    138. 復(fù)制帶隨機(jī)指針的鏈表(深拷貝)題解

    給你一個(gè)長(zhǎng)度為? n ?的鏈表,每個(gè)節(jié)點(diǎn)包含一個(gè)額外增加的隨機(jī)指針? random ?,該指針可以指向鏈表中的任何節(jié)點(diǎn)或空節(jié)點(diǎn)。 構(gòu)造這個(gè)鏈表的? 深拷貝 。?深拷貝應(yīng)該正好由? n ?個(gè)? 全新 ?節(jié)點(diǎn)組成,其中每個(gè)新節(jié)點(diǎn)的值都設(shè)為其對(duì)應(yīng)的原節(jié)點(diǎn)的值。新節(jié)點(diǎn)的? next ?指針和

    2024年02月13日
    瀏覽(90)
  • 【LeetCode刷題日志】138.隨機(jī)鏈表的復(fù)制

    【LeetCode刷題日志】138.隨機(jī)鏈表的復(fù)制

    ??個(gè)人主頁(yè):庫(kù)庫(kù)的里昂 ???C/C++領(lǐng)域新星創(chuàng)作者 ???歡迎 ??點(diǎn)贊?評(píng)論?收藏 ?收錄專(zhuān)欄:LeetCode 刷題日志 ??希望作者的文章能對(duì)你有所幫助,有不足的地方請(qǐng)?jiān)谠u(píng)論區(qū)留言指正,大家一起學(xué)習(xí)交流!?? 目錄 1.題目描述 2.解題思路+代碼實(shí)現(xiàn) 方法:迭代 + 節(jié)點(diǎn)拆分 思

    2024年02月04日
    瀏覽(22)
  • 力扣每日一道系列 --- LeetCode 138. 隨機(jī)鏈表的復(fù)制

    力扣每日一道系列 --- LeetCode 138. 隨機(jī)鏈表的復(fù)制

    ?? 江池?。?個(gè)人主頁(yè) ??個(gè)人專(zhuān)欄: ?數(shù)據(jù)結(jié)構(gòu)探索 ?LeetCode每日一道 ?? 有航道的人,再渺小也不會(huì)迷途。 LeetCode 138. 隨機(jī)鏈表的復(fù)制 給你一個(gè)長(zhǎng)度為 n 的鏈表,每個(gè)節(jié)點(diǎn)包含一個(gè)額外增加的隨機(jī)指針 random ,該指針可以指向鏈表中的任何節(jié)點(diǎn)或空節(jié)點(diǎn)。 構(gòu)造這個(gè)鏈表的

    2024年02月04日
    瀏覽(24)
  • 【刷題專(zhuān)欄—突破思維】LeetCode 138. 隨機(jī)鏈表的復(fù)制

    【刷題專(zhuān)欄—突破思維】LeetCode 138. 隨機(jī)鏈表的復(fù)制

    前言 隨機(jī)鏈表的復(fù)制涉及到復(fù)制一個(gè)鏈表,該鏈表不僅包含普通的next指針,還包含random指針,該指針指向鏈表中的任意節(jié)點(diǎn)或空節(jié)點(diǎn)。 題目鏈接: LeetCode 138. 隨機(jī)鏈表的復(fù)制 題目介紹: 給你一個(gè)長(zhǎng)度為 n 的鏈表,每個(gè)節(jié)點(diǎn)包含一個(gè)額外增加的隨機(jī)指針 random ,該指針可以指

    2024年02月05日
    瀏覽(20)
  • 單鏈表OJ題:LeetCode--138.復(fù)制帶隨即指針的鏈表

    單鏈表OJ題:LeetCode--138.復(fù)制帶隨即指針的鏈表

    朋友們、伙計(jì)們,我們又見(jiàn)面了,本期來(lái)給大家解讀一下LeetCode中第138道單鏈表OJ題,如果看完之后對(duì)你有一定的啟發(fā),那么請(qǐng)留下你的三連,祝大家心想事成! 數(shù)據(jù)結(jié)構(gòu)與算法專(zhuān)欄 : 數(shù)據(jù)結(jié)構(gòu)與算法 個(gè)? 人? 主? 頁(yè) ?: stackY、 C 語(yǔ) 言 專(zhuān) 欄 : C語(yǔ)言:從入門(mén)到精通 ?Lee

    2024年02月08日
    瀏覽(91)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包