35 複雜鍊錶的複製

2021-10-21 05:57:38 字數 2351 閱讀 2632

請實現copyrandomlist函式,複製乙個複雜鍊錶。在複雜鍊錶中,每個節點除了有乙個next指標指向下乙個節點,還有乙個random指標指向鍊錶中的任意節點或者null

示例 1:

輸入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]

輸出:[[7,null],[13,0],[11,4],[10,2],[1,0]]

示例 2:

輸入:head = [[1,1],[2,1]]

輸出:[[1,1],[2,1]]

示例 3:

輸入:head = [[3,null],[3,0],[3,null]]

輸出:[[3,null],[3,0],[3,null]]

示例 4:

輸入:head =

輸出:

解釋:給定的鍊錶為空(空指標),因此返回 null。

注意:本題與主站 138 題相同:

我們假設原鍊錶如下圖所示,為了圖簡潔清晰,我們簡化了示例1中的圖,只讓1311random不為空,此外不管是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...