複雜鍊錶的複製(二)

2021-07-08 22:08:07 字數 1143 閱讀 3624

有乙個複雜鍊錶,其結點除了有乙個m_pnext指標指向下乙個結點外,還有乙個m_psibling指向鍊錶中的任一結點或者null。

思路:如果沒有random pointer那是極容易的,順著鍊錶走讀一遍 ,逐個拷貝節點並鏈結即可,有了random pointer後,其實也就是加上了記錄random pointer的關係而已,考慮到random pointer可以往前指,也可以往後指,則必須全部遍歷完才能完整地建立起random pointer對應關係表,記錄對應關係,當然用map的資料結構啦,c++不太熟,查了下文件也不難寫這麼個基本的資料結構,用兩個map,乙個儲存原始鍊錶的random指向,另乙個記錄原始鍊錶和新建鍊錶按照節點順序建立的對應關係,這樣在走讀完原始鍊錶所有節點後,再刷一遍兩個map就可以恢復新建鍊錶中與原始鍊錶random指向對應的random 指標了,為了省空間,當然map的元素都用

int*表示

/**

* definition for singly-linked list with a random pointer.

* struct randomlistnode

* };

*/class solution

std::mapparall;

std::maprandpoint;

randomlistnode * pleft=head;

randomlistnode * copylist=new randomlistnode(pleft->label);

randomlistnode * pright=copylist;

parall.insert(std::pair(pleft,pright));

randpoint.insert(std::pair(pleft,pleft->random));

pleft=pleft->next;

while(pleft!=null)

for( std::map::iterator ii=randpoint.begin(); ii!=randpoint.end(); ++ii)

}return copylist;}};

鍊錶 複雜鍊錶的複製

問題描述 請實現函式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指標的節點,之後...