複雜鍊錶的複製

2021-09-26 04:01:34 字數 1019 閱讀 1929

輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點),返回結果為複製後複雜鍊錶的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指標的節點,之後...