码迷,mamicode.com
首页 > 其他好文 > 详细

复杂链表的复制

时间:2016-03-30 00:01:28      阅读:356      评论:0      收藏:0      [点我收藏+]

标签:

这道题目首先不管random指针,按照next指针把链表元素给复制出来。然后处理random指针,比较容易想到的想法是利用哈希思想(或者等价的map,set等stl容器),但这样的话需要辅助空间。

不需要辅助空间的方法,复制元素的时候把原始链表改成这样就可以了:

技术分享

然后修改新增元素的random指针,再把这个链表拆开,返回新链表。

技术分享
 1 class Solution {
 2 public:
 3     RandomListNode* Clone(RandomListNode* pHead)
 4     {
 5         if(pHead==NULL)
 6             return NULL;
 7         RandomListNode* root=pHead;
 8         while(root)
 9         {
10             RandomListNode* p=new RandomListNode(root->label);
11             p->next=root->next;
12             root->next=p;
13             root=p->next;
14         }
15         root=pHead;
16         while(root)
17         {
18             if(root->random!=NULL)
19                 root->next->random=root->random->next;
20             root=root->next->next;
21         }
22         RandomListNode* result=pHead->next;
23         RandomListNode* prev=result;
24         root=pHead;
25         while(root->next->next!=NULL)
26         {
27             root->next=prev->next;
28             root=root->next;
29             prev->next=prev->next->next;
30             prev=prev->next;
31         }
32         root->next=NULL;
33         return result;
34     }
35 };
View Code

 

复杂链表的复制

标签:

原文地址:http://www.cnblogs.com/vaecn/p/5335208.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!