《劍指offer 複雜鍊錶的複製

2021-07-25 17:46:33 字數 865 閱讀 4825

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