首页 > 代码库 > Copy List with Random Pointer
Copy List with Random Pointer
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; } };
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。