成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【刷算法】復(fù)雜鏈表的復(fù)制

Mike617 / 1740人閱讀

摘要:題目描述輸入一個復(fù)雜鏈表每個節(jié)點中有節(jié)點值,以及兩個指針,一個指向下一個節(jié)點,另一個特殊指針指向任意一個節(jié)點,返回結(jié)果為復(fù)制后復(fù)雜鏈表的。

題目描述

輸入一個復(fù)雜鏈表(每個節(jié)點中有節(jié)點值,以及兩個指針,一個指向下一個節(jié)點,另一個特殊指針指向任意一個節(jié)點),返回結(jié)果為復(fù)制后復(fù)雜鏈表的head。

分析

常規(guī)的復(fù)制鏈表只需要考慮每個節(jié)點的next指針即可,但是該題還有另外一個random指針,且沒有規(guī)律,可能指向任何其他節(jié)點,此時需要解決的問題是如何復(fù)制random指針。開始想先通過next指針構(gòu)建新的鏈表,同時使用棧保存各個新節(jié)點,然后再通過棧來構(gòu)建random指針,但是發(fā)現(xiàn)過程中并沒有這么簡單,比如對于A.random=C來說,那么在新鏈表中就是A1.random=C1,我無法在新鏈表中以O(shè)(1)的時間復(fù)雜度訪問C1,所以我這種方法受阻。

在網(wǎng)上查到一種思路,遍歷鏈表的時候把每個新節(jié)點添加在舊節(jié)點的后面,比如 A->B->C,復(fù)制完是A->A1->B->B1->C->C1,然后對于每個復(fù)制節(jié)點來說來說,A1.random=A.random.next,B1.random=B.random.next,C1.random=C.random.next,完美的解決了復(fù)制random指針時獲取到目標(biāo)節(jié)點的問題。最后再拆成兩條鏈表即可。

代碼實現(xiàn)
/*function RandomListNode(x){
    this.label = x;
    this.next = null;
    this.random = null;
}*/
function Clone(h)
{
    if(h === null)
        return h;
    var cur = h;
    // 第一次遍歷,先復(fù)制所有節(jié)點,且把復(fù)制節(jié)點添加到相應(yīng)節(jié)點后面
    while(cur !== null) {
        var node = new RandomListNode(cur.label);
        node.next = cur.next;
        cur.next = node;
        cur = node.next;
    }
    
    cur = h;
    // 第二次遍歷,復(fù)制random指針
    while(cur !== null) {
        if(cur.random !== null){
            cur.next.random = cur.random.next;
        }
        cur = cur.next.next;
    }
    var clonedH = h.next;
    var temp;
    cur = h;
    // 第三次遍歷,把鏈表拆開
    while(cur.next !== null) {
        temp = cur.next;
        
        cur.next = cur.next.next;
        cur = temp;
    }   
    
    return clonedH;
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/95978.html

相關(guān)文章

  • Leetcode:完31道鏈表題的一點總結(jié)

    摘要:既然說到地址空間了就順帶說一下上面環(huán)形鏈表這道題的另一種很的解法吧。介紹完常規(guī)操作鏈表的一些基本知識點后,現(xiàn)在回到快慢指針。 ??前幾天第一次在 Segmentfault 發(fā)文—JavaScript:十大排序的算法思路和代碼實現(xiàn),發(fā)現(xiàn)大家似乎挺喜歡算法的,所以今天再分享一篇前兩個星期寫的 Leetcode 刷題總結(jié),希望對大家能有所幫助。 ??本文首發(fā)于我的blog 前言 ??今天終于...

    DevTalking 評論0 收藏0
  • 算法】LeetCode.19-刪除表的倒數(shù)第N個節(jié)點

    摘要:題目描述給定一個鏈表,刪除鏈表的倒數(shù)第個節(jié)點,并且返回鏈表的頭結(jié)點。示例給定一個鏈表和當(dāng)刪除了倒數(shù)第二個節(jié)點后,鏈表變?yōu)檎f明給定的保證是有效的。 題目描述 給定一個鏈表,刪除鏈表的倒數(shù)第 n 個節(jié)點,并且返回鏈表的頭結(jié)點。 示例: 給定一個鏈表: 1->2->3->4->5, 和 n = 2. 當(dāng)刪除了倒數(shù)第二個節(jié)點后,鏈表變?yōu)?1->2->3->5. 說明: 給定的 n 保證是有效...

    Binguner 評論0 收藏0
  • <LeetCode天梯>Day025 刪除表的倒數(shù)第N個節(jié)點(雙指針) | 初級算法 | Pyth

    摘要:示例輸入輸出示例輸入輸出示例輸入輸出提示雙指針法分析根據(jù)題干的要求,我們需要刪除倒數(shù)第個節(jié)點,在返回頭結(jié)點。只需要找到倒數(shù)第個節(jié)點,將其刪除,再返回。 ?作者簡...

    andot 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<