請實現copyrandomlist
函式,複製乙個複雜鍊錶。在複雜鍊錶中,每個節點除了有乙個next
指標指向下乙個節點,還有乙個random
指標指向鍊錶中的任意節點或者null
。
示例 1:
輸入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]示例 2:輸出:[[7,null],[13,0],[11,4],[10,2],[1,0]]
輸入:head = [[1,1],[2,1]]示例 3:輸出:[[1,1],[2,1]]
輸入:head = [[3,null],[3,0],[3,null]]示例 4:輸出:[[3,null],[3,0],[3,null]]
輸入:head =輸出:
解釋:給定的鍊錶為空(空指標),因此返回 null。
注意:
本題與主站 138 題相同:
我們假設原鍊錶如下圖所示,為了圖簡潔清晰,我們簡化了示例1
中的圖,只讓13
和11
的random
不為空,此外不管是next
指標還是random
指標,指向空的均未畫出,紅色表示random
指標。
第一步:我們可以將每個節點都先複製一遍(此時複製時,random
指標暫時不管),並接在原節點和其下乙個節點的中間,如下圖:
第二步:複製random
節點,遍歷原鍊錶的每乙個節點,讓p.next.random = p.random.next;
如圖中藍色的13
節點,當執行p.next.random = p.random.next
後,就是綠色的13
節點的random
指標指向了綠色的7
節點,也即完成了乙個節點的random
指標的複製,後面的節點以此類推。
第三步:分開兩個鍊錶,並將原鍊錶還原。
/*
// definition for a node.
class node }*/
class
solution
//第二步:複製random指標
cur = head;
while
(cur != null )
cur = cur.next.next;
}//第三步:分開兩個鍊錶,並將原鍊錶還原。
node dummy =
newnode(-
1);//複製鍊錶的虛擬頭節點
node help = dummy;
//輔助建立複製的鍊錶
35 鍊錶 複雜鍊錶的複製
輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 2 重新遍歷鍊錶,複製老結點的隨機指標給新結點,如a1.random a.random.n...
35題複雜鍊錶的複製
題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 class solution randomlistnode ptr 1 phea...
35 複雜鍊錶的複製 python
題目 請實現乙個函式,複製乙個複雜鍊錶。在複雜鍊錶中,每個節點除了有乙個m pnext指標指向下乙個節點,還有乙個m psibling指標指向鍊錶中的任意節點或者nullptr。def complex list clone head node node if not head return none...