輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點),返回結果為複製後複雜鍊錶的head。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)
思路:因為新鍊錶也需要複製舊鍊錶的random指標,而random指向的節點也有其next和random,需要保持鍊錶的連貫,所以需要考慮先做出一條新鍊錶,再去構建每乙個節點的random節點,而如何同步random節點就是問題所在。有兩種解決辦法。
解法一:構建同一鍊錶後拆分
1.新舊鍊錶構建在一起,形成z字型
2.為每乙個新節點同步random節點
3.分開兩個鍊錶
classsolution
curnode1 =phead;
curnode2 =newhead;
//新鏈新增random
while
(curnode1)
curnode1 =phead;
curnode2 =newhead;
//脫鏈
while
(curnode1)
return
newhead;
}};
解法二:利用雜湊表
先構建新鍊錶(label,next),同時雜湊表儲存(舊鍊錶節點,新鍊錶節點)對映關係
再遍歷一遍舊鍊錶,利用雜湊的對映為新鍊錶random賦值,oldnode->random = hash[newnode->random]
classsolution
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...