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