輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點),返回結果為複製後複雜鍊錶的head。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)
1.最開始的時候,一下子就想到了遞迴,跑了一下通過了。
public class solution
}
但是,可能也有人發現了,新節點的引用是直接指向舊節點的,也就是說並不是複製,這和題目的要求的是不相符的。
在這個題目中,節點的開闢空間以及next指標的遍歷是簡單的,難點在於如何將random引用指向新開闢的節點。
所以採用下面的方法。
2.第一步,遍歷開闢複製的新節點,為了讓接下來的random指標可以準確定位,在這裡採用了將複製節點插入到原煉表中。
比如原來是a->b->c 變成a->a'->b->b'->c->c'
第二步,遍歷設定random引用指向的節點,由於新節點都在原節點的後面,所以只需要指向原random.next即可。
第三部,將新鍊錶拆出來。
public randomlistnode clone(randomlistnode phead)
//設定random引用
cur1=phead;
while(cur1!=null)
//拆分鍊錶
randomlistnode head = phead.next;
randomlistnode cur2 = head;
cur1 = phead;
while(cur1!=null)
return head;
}
劍指offer複雜鍊錶複製
題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 我的 思路比較笨,就是首先構造乙個正常的不大random指標的鍊錶,然後再去遍歷...
劍指offer 複雜鍊錶複製
輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 解題思路 1 複製每個節點,如 複製節點a得到a1,將a1插入節點a後面 2 遍歷鍊錶,a...
劍指offer 複雜鍊錶複製
題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 非遞迴方法 struct randomlistnode randomlistno...