有乙個複雜鍊錶,其結點除了有乙個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指標的節點,之後...