138. 複製帶隨機指標的鍊錶
面試題35. 複雜鍊錶的複製
/*
// definition for a node.
class node }*/
class
solution
// 第二次遍歷,拷貝next,random節點
p = head;
while
(p != null)
return map.
get(head);}
}
與上面提到的維護乙個舊節點和新節點對應的字典不同,我們通過扭曲原來的鍊錶,並將每個拷貝節點都放在原來對應節點的旁邊。這種舊節點和新節點交錯的方法讓我們可以在不需要額外空間的情況下解決這個問題。讓我們看看這個演算法如何工作
1、遍歷原來的鍊錶並拷貝每乙個節點,將拷貝節點放在原來節點的旁邊,創造出乙個舊節點和新節點交錯的鍊錶。
2、迭代這個新舊節點交錯的鍊錶,並用舊節點的 random 指標去更新對應新節點的 random 指標。
3、現在 random 指標已經被賦值給正確的節點, next 指標也需要被正確賦值,以便將新的節點正確鏈結同時將舊節點重新正確鏈結。
// 拷貝random節點
p = head;
while
(p != null)
// 注意此處不修改原鍊錶
node oldn = head;
node newn = head.next;
node newhead = newn;
while
(oldn != null)
return newhead;
}}
LeetCode 138 複製帶隨機指標的鍊錶
1.題目 2.解答 第一次遍歷鍊錶的時候,複製舊鍊錶的節點值建立乙個新的鍊錶,同時定義乙個 unordered map 作為雜湊表,雜湊表的鍵為舊鍊錶的節點指標,值為新鍊錶的節點指標。然後,第二次遍歷鍊錶,訪問舊鍊錶節點的隨機指標,然後以此為鍵從 map 中取出對應的新鍊錶節點指標,這也就是當前新鍊...
Leetcode 138 複製帶隨機指標的鍊錶
題目 給定乙個鍊錶,每個節點包含乙個額外增加的隨機指標,該指標可以指向鍊錶中的任何節點或空節點。要求返回這個鍊錶的深拷貝。示例 輸入 got eof at end of input 1 next at position 9 ref 2 val 2 rand ref 2 val 1 my defini...
LeetCode 138 複製帶隨機指標的鍊錶
給定乙個鍊錶,每個節點包含乙個額外增加的隨機指標,該指標可以指向鍊錶中的任何節點或空節點。要求返回這個鍊錶的深拷貝。示例 解釋 節點 1 的值是 1,它的下乙個指標和隨機指標都指向節點 2 節點 2 的值是 2,它的下乙個指標指向 null,隨機指標指向它自己。你必須返回給定頭的拷貝作為對轉殖列表的...