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.
/** * Definition for singly-linked list with a random pointer. * struct RandomListNode { * int label; * RandomListNode *next, *random; * RandomListNode(int x) : label(x), next(NULL), random(NULL) {} * }; */ class Solution { public: RandomListNode *copyRandomList(RandomListNode *head) { //insert copy if(head==NULL) return NULL; RandomListNode* p=head; while(p!=NULL) { RandomListNode* pnext=p->next; RandomListNode* pnew=new RandomListNode(p->label); p->next=pnew; pnew->next=pnext; p=pnext; } //the pointer RandomListNode* p1=head; RandomListNode* p2=head->next; while(true) { if(p1->random!=NULL) p2->random=p1->random->next; p1=p1->next->next; if(p1==NULL) break; p2=p2->next->next; } //split the 2 list RandomListNode* phead=head->next; p1=head; p2=phead; while(true) { RandomListNode* p1next=p1->next->next; p1->next=p1next; if(p1next==NULL) break; p2->next=p1next->next; p1=p1next; p2=p1next->next; } return phead; } };
Copy List with Random Pointer,布布扣,bubuko.com
原文:http://www.cnblogs.com/erictanghu/p/3759703.html