劍指 35 複雜鍊錶的複製 雜湊法

2021-10-14 12:21:14 字數 1353 閱讀 6216

【c++刷題學習筆記目錄】

【c++百萬併發網路通訊-筆記目錄】

請實現copyrandomlist函式,複製乙個複雜鍊錶。在複雜鍊錶中,每個節點除了有乙個next指標指向下乙個節點,還有乙個random指標指向鍊錶中的任意節點或者null

示例 1:

輸入:head =[[

7,null],[

13,0]

,[11,

4],[

10,2]

,[1,

0]]輸出:[[7

,null],[

13,0]

,[11,

4],[

10,2]

,[1,

0]]

雜湊表、鍊錶

果然又是一道沒能讀明白的題。相比於傳統的單鏈表只有乙個next指標指向下乙個節點,這道題多了乙個random指標,它的指向不確定。複製乙個複雜鍊錶不好想,那麼就先來想一下簡單的單鏈表怎麼複製。

簡單鍊錶的複製分為以下兩步:

1 對於每乙個舊鍊錶的節點,在記憶體中開闢一塊新的記憶體空間,即新建乙個同樣型別的變數

2 按照舊鍊錶的指向next,為新鍊錶的每乙個節點設定同樣的指向

那麼複雜鍊錶比簡單鍊錶多了乙個random指標就體現在第2步中除了為新鍊錶節點設定next,還要設定random

下面是複製複雜鍊錶的邏輯思路:

class

solution

};

下一步就是對於資料結構的敏感度了,怎麼樣根據舊節點的指向為新節點設定指向呢?

這篇力扣題解中,使用了雜湊法來儲存舊節點與新節點,這樣就儲存了新舊節點的對應關係,直接使用雜湊表的對映來找到舊節點對應的新節點

class

solution

; node* cur = head;

while

(cur)

//3 按照雜湊表中舊節點的指向設定新節點指向

cur = head;

while

(cur)

//4 返回新煉表頭結點

return map[head];}

};

劍指 35,複雜鍊錶的複製(注意)

題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 思路 o n 細節太多了 1,根據普通節點指向先複製一遍,形成a a b b c...

劍指 Offer35鍊錶 複雜鍊錶的複製

題目 請實現 copyrandomlist 函式,複製乙個複雜鍊錶。在複雜鍊錶中,每個節點除了有乙個 next 指標指向下乙個節點,還有乙個 random 指標指向鍊錶中的任意節點或者 null。示例 輸出 7,null 13,0 11,4 10,2 1,0 分析 要做到在原煉表和新鍊錶之間建立關係...

劍指Offer 35 複雜鍊錶的複製

請實現啊函式complexlistnode clone complexlistnode phead 複製乙個 複雜鍊錶。在複雜鍊錶中除了有乙個m pnext指標指向下乙個節點,還有乙個m psaibling 指標指向鍊錶中的任意節點或者nullptr。節點定義如下 class complexlist...