解題思路
要 deep copy 一個 linked list,而且該 linked list 有名為 random 的屬性,會隨機指到 list 中其他 node。
用 two pass 的方式解題,第一次單純把 node 與 val 弄好,第二次則根據對照把 random 補上去。
程式碼
class Solution {
public:
Node* copyRandomList(Node* head) {
Node *dummy = new Node(0);
Node *newHead = dummy, *p = head;
unordered_map<Node*, Node*> mp; // old, new
while(p != nullptr)
{
newHead->next = new Node(p->val);
newHead = newHead->next;
mp[p] = newHead;
p = p->next;
}
newHead = dummy->next, p = head;
while(newHead != nullptr)
{
newHead->random = mp[p->random];
newHead = newHead->next;
p = p->next;
}
return dummy->next;
}
};
沒有留言:
張貼留言