給定乙個鍊錶,每個節點包含乙個額外增加的隨機指標,該指標可以指向鍊錶中的任何節點或空節點。
要求返回這個鍊錶的深拷貝。
示例:輸入:
,"val":2},"random":,"val":1}
你必須返回給定頭的拷貝作為對轉殖列表的引用。
在真實的面試中遇到過這道題?
有一種直接的做法是先按順序複製一遍,然後再依次複製隨機節點。
複製隨機節點,需要在新的鍊錶中找一遍,這樣的做法時間複雜度是o(n^2)
可以用hash的方法,將每個節點的位址存下來,這樣可以將時間複雜優化為o(n), 但同時空間複雜度也為o(n)
存在一種時間複雜為o(n), 空間複雜度為o(1)的做法分三步進行
第一步:將複製一遍鍊錶的節點,與原來的鍊錶相連
第二步:複製隨機節點,此時,可以再o(n)的時間完成,因為複製出的鍊錶就掛在原來的鍊錶後面。
第三步:分離鍊錶
/*
// definition for a node.
class node
node(int _val, node* _next, node* _random)
};*/
class solution
void clonenodes(node* head)
}void clonerandomnodes(node* head)
pnode = temp->next;}}
node* reconnectnodes(node* head)
while(pnode)
return pclonedhead;
}};
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,隨機指標指向它自己。你必須返回給定頭的拷貝作為對轉殖列表的...