问题描述如下:
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.
问题链接cpp代码如下:
class Solution {
public:
RandomListNode *copyRandomList(RandomListNode *head) {
if(head==NULL)return NULL;
RandomListNode* first=NULL,*last=NULL;
for(RandomListNode* p=head;p;p=p->next){
if(first==NULL){
first=new RandomListNode(p->label);
last=first;
}else{
last->next=new RandomListNode(p->label);
last=last->next;
}
}
for(RandomListNode* p=head;p;){
RandomListNode* tmp=first->next;
first->next=p->next;
p->next=first;
p=first->next;
first=tmp;
}
for(RandomListNode* p=head;p;){
if(p->random)
p->next->random=p->random->next;
else p->next->random=NULL;
p=p->next;
p=p->next;
}
first=head->next;
for(RandomListNode *p=head;true;){
RandomListNode* tmp=p->next->next;
if(tmp==NULL){
p->next=NULL;
break;
}else{
p->next->next=tmp->next;
p->next=tmp;
p=tmp;
}
}
return first;
}
};