首先在新的煉表裡開始複製節點的next資訊,在複製next資訊的時候,建立乙個雜湊表,雜湊表的鍵為舊鍊錶裡面的節點,值為新鍊錶裡面的節點,如:將舊鍊錶的節點node賦值給新鍊錶的node_1後,給雜湊表新增乙個鍵值對:nodemap[node] = node_1。
這樣做的好處是在第一次複製完next資訊之後,雜湊表也建立好了,在複製random節點時,由於有雜湊表的鍵值對,因此,找到node_1的random的時間複雜度為o(1),即:node_1->random = nodemap[node->random]。
具體**如下:
class solution
temp = resulttemp->next;
// 第二次複製,對random指標複製
while
(phead !=
null
)else temp->random == nullptr;
phead = phead->next;
temp = temp->next;
}return resulttemp->next;}
randomlistnode *
clone
(randomlistnode* phead)}}
;
具體**如下:class solution
// 對節點的random指標賦值
phead = pheadnew;
while
(phead != nullptr)
return pheadnew;
} randomlistnode*
reconnentnode
(randomlistnode* phead)
while
(pnode!=nullptr)
;return pclonedhead->next;
} randomlistnode *
clone
(randomlistnode* phead)
};
對於reconnentnode函式,我畫了個圖在下面,看起來會清楚點
劍指offer複雜鍊錶複製
題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 我的 思路比較笨,就是首先構造乙個正常的不大random指標的鍊錶,然後再去遍歷...
劍指offer 複雜鍊錶複製
輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 解題思路 1 複製每個節點,如 複製節點a得到a1,將a1插入節點a後面 2 遍歷鍊錶,a...
劍指offer 複雜鍊錶複製
題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 非遞迴方法 struct randomlistnode randomlistno...