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

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

給定一個鏈表,每個節(jié)點包含一個額外增加的隨機(jī)指針煤墙,該指針可以指向鏈表中的任何節(jié)點或空節(jié)點沈撞。
要求返回這個鏈表的 深拷貝扣甲。
我們用一個由 n 個節(jié)點組成的鏈表來表示輸入/輸出中的鏈表担平。每個節(jié)點用一個 [val, random_index] 表示:
val:一個表示 Node.val 的整數(shù)却特。
random_index:隨機(jī)指針指向的節(jié)點索引(范圍從 0 到 n-1)救崔;如果不指向任何節(jié)點翘骂,則為 null 壁熄。


image.png

思路

本題難點是找到原始節(jié)點的random節(jié)點
1 第一遍遍歷,深拷貝每一個節(jié)點碳竟,使原始節(jié)點的next指向它的深拷貝節(jié)點草丧,深拷貝節(jié)點指向原始節(jié)點的原始next節(jié)點。這樣每個原始節(jié)點的next節(jié)點都是它的深拷貝節(jié)點
即n1->n1'->n2->n2'->null
2 第二遍遍歷莹桅,使深拷貝節(jié)點的random節(jié)點指向原始節(jié)點的random節(jié)點的next節(jié)點(也就是原始節(jié)點random的深拷貝節(jié)點)
3 斷開兩個鏈表

代碼

class Solution {
    public Node copyRandomList(Node head) {
        if (head == null){
            return null;
        }
        //1 將所有節(jié)點昌执,深拷貝出一個節(jié)點,放在該節(jié)點后诈泼。注意這樣就可以通過p.next找到節(jié)點的深拷貝節(jié)點
        Node p = head;
        while (p != null){
            Node cp = new Node(p.val);
            cp.next = p.next;
            p.next = cp;
            p = p.next.next;
        }
        //2 給深拷貝節(jié)點的random復(fù)制
        p = head;
        while (p != null){
            if(p.random != null) {
                p.next.random = p.random.next;
            }else {
                p.next.random = null;
            }
            p = p.next.next;
        }

        //3 斷開兩個鏈表
        p = head;
        Node p2 = head.next;
        Node newHead = p.next;
        while (p2.next != null){
            p.next = p2.next;
            p = p.next;
            p2.next = p.next;
            p2 = p2.next;
        }
        p.next = null;
        return newHead;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末懂拾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子铐达,更是在濱河造成了極大的恐慌岖赋,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓮孙,死亡現(xiàn)場離奇詭異唐断,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)杭抠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門脸甘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人偏灿,你說我怎么就攤上這事丹诀。” “怎么了翁垂?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵铆遭,是天一觀的道長。 經(jīng)常有香客問我沿猜,道長疚脐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任邢疙,我火速辦了婚禮棍弄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疟游。我一直安慰自己呼畸,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布颁虐。 她就那樣靜靜地躺著蛮原,像睡著了一般。 火紅的嫁衣襯著肌膚如雪另绩。 梳的紋絲不亂的頭發(fā)上儒陨,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天花嘶,我揣著相機(jī)與錄音,去河邊找鬼蹦漠。 笑死椭员,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的笛园。 我是一名探鬼主播隘击,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼研铆!你這毒婦竟也來了埋同?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤棵红,失蹤者是張志新(化名)和其女友劉穎凶赁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逆甜,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡虱肄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了忆绰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡可岂,死狀恐怖错敢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缕粹,我是刑警寧澤稚茅,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站平斩,受9級特大地震影響亚享,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绘面,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一欺税、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧揭璃,春花似錦晚凿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至情组,卻和暖如春燥筷,著一層夾襖步出監(jiān)牢的瞬間箩祥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工肆氓, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留袍祖,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓做院,卻偏偏與公主長得像盲泛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子键耕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容