使用哈希表存储旧节点和新节点的对应关系,使用旧节点找到复制的对应的新节点。
初始化链表的next后,对新节点的每个random进行赋值:
memo[t]->random=memo[t->random];
代码
class Solution {
public:
Node* copyRandomList(Node* head) {
if(head==NULL) return NULL;
unordered_map<Node*,Node*> memo;
Node* newhead=new Node(head->val);
memo[head]=newhead;
Node* t=head->next;
Node* newt=newhead;
while(t){
newt->next=new Node(t->val);
memo[t]=newt->next;
t=t->next;
newt=newt->next;
}
t=head;
while(t){
memo[t]->random=memo[t->random];
t=t->next;
}
return newhead;
}
};