劍指offer複雜鍊錶複製

2021-07-16 05:56:03 字數 1089 閱讀 8875

題目描述

輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點),返回結果為複製後複雜鍊錶的head。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)

我的**,思路比較笨,就是首先構造乙個正常的不大random指標的鍊錶,然後再去遍歷原始鍊錶,檢視random指標指向的位置,同時移動複製的鍊錶的next,找到後賦值。時間複雜度比較大o(n^2)

public

class solution

tmp = tmp.next;

}cur = head2;

tmp = phead;

while(cur!=null)

tmp = tmp.next;

cur.random = tmp2;

cur = cur.next;

}return head2;}}

優秀**,c++寫的,忽略語言,看療效,首先將複製的節點插入到對應的原始節點的後面,這樣組成了乙個複製節點和原始節點混合的鍊錶,此時鍊錶上除了原始鍊錶節點上的random有指向外,新生成的節點random均為空。下一步就是補齊random節點,利用新舊節點混合在一起的優勢,可以很快找到新節點的random指標的指向。最後,沒隔乙個拆分開。得到原始節點。時間複雜度o(n)。畫了張圖,將就著看吧。找到紅色的random指向後,綠色的也就很容易找到了。

}//拆分

randomlistnode *pclonehead = phead->next;

randomlistnode *tmp;

currnode = phead;

while(currnode->next)

return pclonehead;}};

劍指offer 複雜鍊錶複製

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

劍指offer 複雜鍊錶複製

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

複雜鍊錶的複製(劍指offer)

題目 有乙個複雜鍊錶,其結點除了有乙個m pnext指標指向下乙個結點外,還有乙個m psibling指向鍊錶中的任一結點或者null。請完成函式complexnode clone complexnode phead 以複製乙個複雜鍊錶。struct complexnode void cloneno...