劍指offer 複雜鍊錶的複製

2021-10-19 14:37:04 字數 1095 閱讀 1053

輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標random指向乙個隨機節點),請對此鍊錶進行深拷貝,並返回拷貝後的頭結點。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)。

建立新的節點,根據原鍊錶的next指標為新的節點逐個賦值,將新鍊錶的next指標賦值完成後,第二次遍歷複製random,複製random時,判斷該複製鍊錶哪個結點與原煉表要複製結點同一位置結點的random相同,將複製鍊錶該賦值結點的random指向該節點。

但是一直是陣列越界,檢查也沒什麼問題,後來才發現沒有判斷原煉表為空的情況。

**

/*

struct randomlistnode

};*/

class

solution

p->next=

null

;//接下來複製random指標

p=cphead;

//p為要挨個賦值random的結點

q=phead;

randomlistnode *cnode=cphead;

randomlistnode *node=phead;

while

(p) cnode=cnode-

>next;

node=node-

>next;}if

(!node) p-

>random=

null

; p=p-

>next;

q=q-

>next;

}return cphead;}}

;

做鍊錶題一定一定要注意判斷原煉表為空的情況

具體分為三步

第一步,在原鍊錶每乙個結點a的後面複製乙個值相同的結點a`, a的next為a』,a原來的next為a『的next;

第二步,a』的random為a的random的next,將每乙個被複製的重複節點的random都根據這種辦法賦值;

第三步,將所有的a『節點都從原煉表中抽離出來,組成乙個新的鍊錶,返回新鍊錶的頭節點。

**這裡就不再寫出了。

劍指offer複雜鍊錶複製

題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 我的 思路比較笨,就是首先構造乙個正常的不大random指標的鍊錶,然後再去遍歷...

劍指offer 複雜鍊錶複製

輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 解題思路 1 複製每個節點,如 複製節點a得到a1,將a1插入節點a後面 2 遍歷鍊錶,a...

劍指offer 複雜鍊錶複製

題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 非遞迴方法 struct randomlistnode randomlistno...