劍指offer35題 複雜鍊錶的複製

2021-10-23 22:20:34 字數 1233 閱讀 8222

請實現 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]]

1.利用雜湊表儲存。雜湊表的key是每個node的指標,value是利用node的val新建的節點,然後通過遍歷key 將每個value鏈結在一起

/*

// definition for a node.

class node

};*/

class

solution

tmp=head;

while

(tmp!=

nullptr)if

(tmp-

>random)

//如果原鍊錶存在random

tmp=tmp-

>next;

}return nodemap[head];}

};

2.原地方法,

(1)將原鍊錶擴充套件成雙倍,如1-2-3 變為 1-1-2-2-3-3.每個節點後面建立乙個新節點

(2)將舊節點的random賦值給新節點的random

(3)將新舊節點分成兩個節點

/*

// definition for a node.

class node

};*/

class

solution

cur=head;

while

(cur)

//將random指標複製給新節點

cur=cur-

>next-

>next;

} node* dummy=

newnode(0

);cur=head;

node* res=dummy;

while

(cur)

//分離新舊鍊錶

return dummy-

>next;}}

;

劍指offer35題 複雜鍊錶的複製

題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標random指向乙個隨機節點 請對此鍊錶進行深拷貝,並返回拷貝後的頭結點。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 首先第一種想法是分兩步進行,首先複製原始鍊錶的每個節點,通過...

劍指Offer 35 複雜鍊錶的複製

請實現啊函式complexlistnode clone complexlistnode phead 複製乙個 複雜鍊錶。在複雜鍊錶中除了有乙個m pnext指標指向下乙個節點,還有乙個m psaibling 指標指向鍊錶中的任意節點或者nullptr。節點定義如下 class complexlist...

(劍指offer)35 複雜鍊錶的複製

輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 思路 1.先複製鍊錶節點的值放在原來的節點後面,組成乙個新的鍊錶 2.處理複雜指標 安排複...