題目:有乙個複雜鍊錶,其結點除了有乙個m_pnext指標指向下乙個結點外,
還有乙個m_psibling指向鍊錶中的任一結點或者null。其結點的c++定義如下:
struct complexnode
;
請完成函式complexnode* clone(complexnode* phead),以複製乙個複雜鍊錶。
思路: 一般複製乙個簡單鍊錶就這麼遍歷一遍就好了,這個複雜鍊錶,比簡單鍊錶多的地方就在於多了乙個sibling的指標,也就是說在建立完簡單鍊錶之後,如何在新的鍊錶中找到sibling對應的位址。我們已知的是舊的節點的位址,所以只需要用乙個map,儲存每乙個節點舊的節點對應的新的節點的位址即可。
第一次遍歷,建立簡單節點,第二次遍歷,對於舊煉表中的每乙個節點的sibling指標位址,從map中找到新煉表中對應節點的位址,連線上就好了。
**如下:
#include "stdafx.h
"#include
#include
using
namespace
std;
struct
complexnode
;
complexnode* clone(complexnode*phead)
//根據map中儲存的資料,找到對應的節點
p =phead;
tail =newhead;
while(p!=null)
p = p->pnext;
tail = tail->pnext;
}return
newhead; }
void deletelist(complexnode*phead)
}int
main()
結果,我用斷點看了一下,是正確的。
鍊錶 複雜鍊錶的複製
問題描述 請實現函式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指標的節點,之後...