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