劍指刷題之複雜鍊錶複製

2021-10-23 01:49:15 字數 1354 閱讀 4857

- 題目要求

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

- 題目分析採用分治法解決該問題。一共分三步

第一步,複製鍊錶,插入的節點random指標均為空

第二步,根據各節點位置關係,更新random指標

第三步,將複製的鍊錶split得到結果。

//節點定義

struct randomlistnode };

class

solution

randomlistnode*

copylist

(randomlistnode* phead)

return phead;

}

randomlistnode*

linklist

(randomlistnode* phead)

curnode = copynode-

>next;

}return phead;

}

randomlistnode*

splitlist

(randomlistnode* phead)

randomlistnode* curnode = phead;

//a randomlistnode* pcopyhead = phead-

>next;

//a'

randomlistnode* curcopynode = pcopyhead;

//a'

while

(curnode !=

null

) curnode = curnode-

>next;

curcopynode = curcopynode-

>next;

}return pcopyhead;}}

;

結構體指標初始化:

randomlistnode* copynode =

newrandomlistnode

(curnode-

>label)

;//a'

劍指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 ...