演算法練習篇之 複雜鍊錶的複製

2021-09-27 06:24:43 字數 1428 閱讀 7937

輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點),返回結果為複製後複雜鍊錶的head。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)

本題思路共分為三個階段:

階段一:鍊錶節點的複製

本階段只需將鍊錶的每個節點複製一次,方法很簡單a->b 變為a->a』->b,每次都產生乙個新的節點,依次插在原鍊錶每個節點的後面,a『即為新產生的點。插入操作也是鍊錶的常見操作!

階段二:還原複製的每個節點的特殊指標指向

因為每個節點有兩個指標,第一階段,我們完成了節點複製,但是其每個節點的特殊指標指向,我們還沒有定義,其實複製節點的特殊指標(random指標)指向,為原來本節點的random指標指向節點的下一節點。讀者看下面示意圖看是否是這麼個道理。

階段三:拆分兩個鍊錶

上面兩個階段,我們已經完成的差不多了,接下來需要做的就是分離工作。奇數個節點為本鍊錶,偶數個節點為複製鍊錶,依據這個思想我們可以逐步分離,**寫的比較詳細!

階段一:把複製的結點鏈結在原始鍊錶的每一對應結點後面

階段二:把複製的結點的random指標指向被複製結點的random指標的下乙個結點

階段三:拆分成兩個鍊錶,奇數字置為原鍊錶,偶數字置為複製鍊錶

去部落格設定頁面,選擇一款你喜歡的**片高亮樣式,下面展示同樣高亮的**片.

class

complexlistnode

public

class

copycomplexlist

}public

void

connectrandomnodes

(complexlistnode phead)

pnode=pclone.next;}}

complexlistnode reconnectnodes

(complexlistnode phead)

return pclonehead;

} complexlistnode clone

(complexlistnode phead)

public

static

void

main

(string[

] args)

}

明天開始比賽,這週先斷更幾天,下週多更新幾次!!!!!!!!!

加油 衝衝衝!!!!!!

劍指Offer之 複雜鍊錶的複製

複雜鍊錶中,每個結點除了有乙個m pnext指標指向下乙個結點外,還有乙個m psibling指向鍊錶中的任意結點或者null。實現乙個函式可以複製這個複雜鍊錶。先正常複製乙個結點,並把這個複製的結點置於當前結點後面。其後,再複製鍊錶結點的m psibling指標,由前乙個結點求出它的m psibl...

劍指Offer之複雜鍊錶的複製

輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 鍊錶的結構大體如下 真正的難點在於怎樣複製這個random的結構。參考了dalao提出的思...

劍指offer 之複雜鍊錶的複製

複雜鍊錶的複製 思路 1.先迴圈一遍,把原鍊錶的各個元素複製一遍連成串 2.再迴圈一遍,複製原鍊錶的隨機指標,在新鍊錶中指向對應元素 3.最後迴圈一遍,把原煉表和新鍊錶解鏈 coding utf 8 class randomlistnode def init self,x self.label x ...