輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點),返回結果為複製後複雜鍊錶的head。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)
#include
#include
#include
using namespace std;
struct randomlistnode
};class solution1
phead = pclone->next;
while (1)
phead = pclone;
pclone = phead->next;
pcopy = pclone;
phead = pclone->next;
while (phead != null)
pori->next = null;
return pcopy;}};
class solution
phead = pclone->next;
while (1)
phead = pclone;
pclone = phead->next;
while (phead->next!=null)
return pclone;
}總結:
1.本題的難點在於新鍊錶節點a1中隨機指標的賦值,新節點a1中的rand需要通過a->rand來獲取。而a->rand對應新的節點的位址是不知道的,所以只能先不管rand,構建新鍊錶。
2.接下來解決新鍊錶節點中的rand,a1->rand是根據a->rand來獲取,a1->rand指向b1,a->rand指向b,所以需要根據b得到b1,一種做法是在構建新鍊錶的時候用乙個雜湊表來記錄新舊節點的對應關係。然後根據雜湊表更新新鍊錶節點中的rand。但是構造雜湊表要付出不少空間代價和時間代價。
3.劍指offer中介紹了一種巧妙的方法:把新的節點放到原鍊錶對應節點的後面,合成乙個新鍊錶。於是根據b1=b->b,a->a1->b->b1->c->c1,所以有a1->rand=a->rand->next;更新完新節點中的rand值,再將新鍊錶從總煉表中取出來。
劍指offer 25 複雜鍊錶的複製
輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 本題的最簡答的思路就是先實現結點與next指標的複製,然後利用遍歷整個鍊錶尋找每個結點的r...
劍指offer 25 複雜鍊錶的複製
輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 1 複製每個節點,如 複製節點a得到a1,將a1插入節點a後面 2 遍歷鍊錶,a1 ran...
劍指offer25 複雜鍊錶的複製
題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 首先想到的肯定是遞迴來求解了 coding utf 8 class random...