Copy List with Random Pointer

来源:互联网 发布:淘宝体验中心 编辑:程序博客网 时间:2024/06/10 15:13

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) {RandomListNode *pHead=head;        if(pHead==NULL)  {  return NULL;  }  if(pHead->next==NULL)  {  RandomListNode *pHead_copy=new RandomListNode(pHead->label);  pHead_copy->next=NULL;if(pHead->random!=NULL){    pHead_copy->random=pHead_copy;}return pHead_copy;  }  //第一步   在每个结点的后面插入一个copy  for(RandomListNode *pNode=pHead;pNode!=NULL;pNode=pNode->next->next)  {  RandomListNode *pNodeCopy=new RandomListNode(0);  pNodeCopy->label=pNode->label;  pNodeCopy->next=pNode->next;  pNodeCopy->random=NULL;  pNode->next=pNodeCopy;  }  //第二步  '遍历'扩充后的链表,设置copy结点的pOther  for(RandomListNode *pNode=pHead;pNode!=NULL;pNode=pNode->next->next)  {  if(pNode->random)  pNode->next->random=pNode->random->next;  else  pNode->next->random=NULL;  }  //第三步  拆分链表  RandomListNode *pHead_copy=pHead->next;  for(RandomListNode *pNode=pHead;pNode!=NULL;)  {  RandomListNode *pTmp=pNode->next;  if(pTmp)  {  pNode->next=pNode->next->next;  }  pNode=pTmp;  }  return pHead_copy;      }};


0 0
原创粉丝点击