輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點),返回結果為複製後複雜鍊錶的head。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)
鍊錶的結構大體如下:
真正的難點在於怎樣複製這個random的結構。參考了dalao提出的思路,結合個人理解,總結如下:
複製總共需要遍歷兩邊鍊錶,第一遍是複製a到e,這一遍僅僅複製next
指標,把新的節點加入到原來節點的後面,應該是這個效果:
然後在複製random指標,後來複製的random指標只需要在原來節點的random指標後邊就行了。
這種複製方式給了我們複製資料結構的一種新的思路!注意乙個坑:不要破壞原來鍊錶的結構!!!!!
class solution
using node = randomlistnode;
// 第一遍複製,等效為後移
node* p = phead;
while
(p != nullptr)
// 第二遍複製random指標
p = phead;
while
(p != nullptr)
p = p->next->next;
}// 提取出偶數節點,注意複製不能破壞原有鍊錶的結構!!!
node* pre = phead;
p = phead->next;
node* head = p;
while
(pre != nullptr)
p = p->next;
}return head;}}
;
劍指Offer之 複雜鍊錶的複製
複雜鍊錶中,每個結點除了有乙個m pnext指標指向下乙個結點外,還有乙個m psibling指向鍊錶中的任意結點或者null。實現乙個函式可以複製這個複雜鍊錶。先正常複製乙個結點,並把這個複製的結點置於當前結點後面。其後,再複製鍊錶結點的m psibling指標,由前乙個結點求出它的m psibl...
劍指offer 之複雜鍊錶的複製
複雜鍊錶的複製 思路 1.先迴圈一遍,把原鍊錶的各個元素複製一遍連成串 2.再迴圈一遍,複製原鍊錶的隨機指標,在新鍊錶中指向對應元素 3.最後迴圈一遍,把原煉表和新鍊錶解鏈 coding utf 8 class randomlistnode def init self,x self.label x ...
(十八)劍指offer之複雜鍊錶的複製
題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意 輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空。struct randomlistnode class solution pri...