劍指Offer 複雜鍊錶的複製

2021-09-13 01:47:00 字數 1137 閱讀 2711

首先在新的煉表裡開始複製節點的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...