题目:
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
分析:
用map存一下每个地址对应的编号,这样random指向的节点就知道了。
等链表本体复制完成后再把random域复制上。
class Solution {
public:
RandomListNode *copyRandomList(RandomListNode *head) {
if(!head) return NULL;
RandomListNode *p = head;
map<RandomListNode*, int> map1;
map<int, RandomListNode*> map2;
int n = 0;
while(p!=NULL){
map1[p] = n;
p = p->next;
n++;
}
RandomListNode *q = new RandomListNode(head->label), *l, *headq = q;
int m = 0;
map2[0] = q;
p = head->next;
while(p!=NULL){
m++;
l = new RandomListNode(p->label);
map2[m] = l;
q -> next = l;
q = q -> next;
p = p -> next;
}
p = head;
q = headq;
while(p!=NULL){
if(p->random)
q -> random = map2[map1[p -> random]];
p = p -> next;
q = q -> next;
}
return headq;
}
};