劍指offer 25 複雜鍊錶的複製

2021-09-26 19:38:54 字數 917 閱讀 5018

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

思路:因為新鍊錶也需要複製舊鍊錶的random指標,而random指向的節點也有其next和random,需要保持鍊錶的連貫,所以需要考慮先做出一條新鍊錶,再去構建每乙個節點的random節點,而如何同步random節點就是問題所在。有兩種解決辦法。

解法一:構建同一鍊錶後拆分

1.新舊鍊錶構建在一起,形成z字型

2.為每乙個新節點同步random節點

3.分開兩個鍊錶

class

solution

curnode1 =phead;

curnode2 =newhead;

//新鏈新增random

while

(curnode1)

curnode1 =phead;

curnode2 =newhead;

//脫鏈

while

(curnode1)

return

newhead;

}};

解法二:利用雜湊表

先構建新鍊錶(label,next),同時雜湊表儲存(舊鍊錶節點,新鍊錶節點)對映關係

再遍歷一遍舊鍊錶,利用雜湊的對映為新鍊錶random賦值,oldnode->random = hash[newnode->random]

class

solution

curnode1 =phead;

curnode2 =newhead;

while

(curnode1)

return

newhead;

}};

劍指offer 25 複雜鍊錶的複製

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

劍指offer 25 複雜鍊錶的複製

輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 本題的最簡答的思路就是先實現結點與next指標的複製,然後利用遍歷整個鍊錶尋找每個結點的r...

劍指offer 25 複雜鍊錶的複製

輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 1 複製每個節點,如 複製節點a得到a1,將a1插入節點a後面 2 遍歷鍊錶,a1 ran...