LeetCode 138 複製帶隨機指標的鍊錶

2021-09-18 01:43:33 字數 1244 閱讀 7868

給定乙個鍊錶,每個節點包含乙個額外增加的隨機指標,該指標可以指向鍊錶中的任何節點或空節點。

要求返回這個鍊錶的深拷貝。 

示例:

解釋:

節點 1 的值是 1,它的下乙個指標和隨機指標都指向節點 2 。

節點 2 的值是 2,它的下乙個指標指向 null,隨機指標指向它自己。

你必須返回給定頭的拷貝作為對轉殖列表的引用。

此題有o(n)時間複雜度,並且空間複雜度為常數的演算法,而且是此題的經典演算法。1. 先把原鍊錶的每個節點拷貝乙份,就是在原鍊錶的每個節點後面連線上乙個該節點的拷貝。2. 然後把新建立的節點的random指向它的原節點的random的next節點。即:cur->next->random = cur->random->next; 3. 把現在的鍊錶的奇數字置的節點順次連線在一起,就恢復了原鍊錶;把偶數字置的節點順次連線在一起,就得到了深拷貝之後的鍊錶。至此演算法結束,返回拷貝後鍊錶的頭節點即可。

這裡有容易忽略而導致錯誤的地方:1. 在new新節點node時,要在後面傳入兩個null,因為它建構函式沒有預設為null;2. oj也會檢查原鍊錶是否有改變,所以我們在返回時要保證原鍊錶還是老樣子,這裡注意在步驟3結束後,記得把原鍊錶的尾節點的next置為null。

/*

// definition for a node.

class node

node(int _val, node* _next, node* _random)

};*/

class solution

cur = head;

while(cur)

cur = head;

node* node = head->next;

node* newnode = node;

while(node->next)

cur->next = null;

return newnode;}};

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...

leetcode138 複製帶隨機指標的鍊錶

給定乙個鍊錶,每個節點包含乙個額外增加的隨機指標,該指標可以指向鍊錶中的任何節點或空節點。要求返回這個鍊錶的深拷貝。做這道題分為三步 假設我們要複製的鍊錶如下 橙色的為隨機指標 遍歷原鍊錶的每乙個結點,複製新結點,插到原鍊錶的後邊 遍歷原鍊錶的每乙個節點,進行新結點random的設定 把一條鍊錶拆分...