22 複雜鍊錶的複製

2021-08-17 19:50:23 字數 882 閱讀 7756

輸入乙個複雜鍊錶(每個節點中又節點值,以及兩個指標,乙個指向下乙個節點,乙個指向任意節點)返回結果為複製後複雜鍊錶的head。

(一)先複製每乙個節點以及每乙個節點的next指標,再從頭遍歷每乙個節點,記錄它們的random節點,再head遍歷節點尋找random節點所在的位置。這樣會用兩個迴圈進行。時間複雜度o(n^2)

(二)1、先複製每乙個節點以及每乙個節點的next指標。

2、將新複製的鍊錶與舊鍊錶連線起來。例如原煉表為a-b-c-d-e-f-g-null。複製後的鍊錶為a'-b'-c'-d'-e'-f'-g'-null。

將新舊鍊錶連線起來後的鍊錶為a-a'-b-b'-c-c'-d-d'-e-e'-f-f'-g-g'-null.那麼連線後的鍊錶中存在的這樣的乙個關係。

a->random->next = a->next->random,其中a->next =a'  即 a'->random = a->random->next,即尋得a'

的random指標。

3、將新舊鍊錶拆開即可。假設連線後的鍊錶為a-a'-b-b'-c-c'-d-d'-e-e'-f-f'-g-g'-null,

從頭開始遍歷,讓cur->next 指向cur->next->next即可。

**如下:

randomlistnode* clone(randomlistnode* phead)

cur = phead;

while(cur!=null) // 複製random

cur = phead;

randomlistnode * newhead = cur->next;

while(cur->next!=null) //拆鍊錶

return newhead;

}

鍊錶 複雜鍊錶的複製

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