复杂链表的复制

Posted vaevaevae

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复杂链表的复制相关的知识,希望对你有一定的参考价值。

这道题目首先不管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

 

以上是关于复杂链表的复制的主要内容,如果未能解决你的问题,请参考以下文章

复杂链表的复制

剑指offer 25.复杂链表的复制

数据结构复杂链表的复制

复杂链表的复制

python解决复杂链表的复制

复杂链表的复制