輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點),返回結果為複製後複雜鍊錶的head。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)
node結構如下:
#include struct randomlistnode
};
讀題可的題中描述的鍊錶儲存結構如下:
所以,根據直覺可以先複製單鏈表,再複製random指標。
單鏈表複製非常簡單,重要的是要在原煉表和新鍊錶中生成乙個對映,從而可以在第二次迴圈中複製random指標指向,所以使用hash、map是不錯的選擇,**實現如下:、
#include struct randomlistnode
};class solution1
s = c;
}tmp = phead;
while (tmp != nullptr)
return map_cout[phead];}};
test.cpp
#pragma once
#include "complicated_list.h"
class complicate_list_test
};
第二種方法:同樣是先複製單鏈表,不過在對映的時候,不需要採取額外的map、hash來儲存,而是採取斷原鍊錶的方法,將原鍊錶的next指標指向新鍊錶的節點,就會形成如下結果:
然後同理,可以通過再次遍歷old鍊錶,間接方法將new鍊錶的random指標賦值,優點就是不需要額外的空間,缺點就是會破壞原鍊錶(而且操作複雜)。
實現,暫無。
鍊錶 複雜鍊錶的複製
問題描述 請實現函式complexlistnode clone complexlistnode phead 複製乙個複雜鍊錶。在複雜鍊錶中,每個結點除了有乙個next指標指向下乙個結點之外,還有乙個random指向鍊錶中的任意結點或者null。結點的定義如下 struct randomlistnod...
複雜鍊錶複製
複雜鍊錶複製的標頭檔案mlist.h ifndef mlist h define mlist h include include includetypedef int datatype typedef struct node node,pnode,plist pnode crealist datat...
複製複雜鍊錶
題目 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 解題思路 首先有三種解法 第一種就是中規中矩的解法,首先複製next指標的節點,之後...