剑指offer复杂链表的复制

Posted asumi

tags:

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

题目链接:复杂链表的复制

 

题意:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。

 

题解:啊这个题我没看懂其实。我看了剑指的题解。大概就是要分三步

1、复制指针的label和next。将复制的节点跟在原节点后面。然后创造新的链表。

2、设置复制出来的新链表的random。

3、分离新旧链表。

技术图片

 

 

 

代码:

 1 /*
 2 struct RandomListNode {
 3     int label;
 4     struct RandomListNode *next, *random;
 5     RandomListNode(int x) :
 6             label(x), next(NULL), random(NULL) {
 7     }
 8 };
 9 */
10 class Solution {
11 public:
12     RandomListNode* Clone(RandomListNode* pHead)
13     {
14         RandomListNode* cur = pHead;
15         RandomListNode* list = NULL;
16         RandomListNode* tail = NULL;
17         if(cur == NULL) return NULL;
18         //复制原来的节点
19         while(cur){
20             RandomListNode* node = new RandomListNode(cur->label);
21             RandomListNode* next = cur->next;
22             
23             cur->next = node;
24             node->next = next;
25             
26             cur = node->next;
27         }
28         //random
29         cur = pHead;
30         while(cur){
31             if(cur->random){
32                 RandomListNode* next = cur->next;
33                 next->random = cur->random->next;
34             }
35             else    cur->next->random = NULL;
36             cur = cur->next->next;
37         }
38         
39         list = tail = pHead->next;
40         pHead->next = list->next;
41         cur = pHead->next;
42         while(cur){
43             RandomListNode* copy = cur->next;
44             cur->next = copy->next;
45             
46             tail->next = copy;
47             tail = copy;
48             
49             cur = cur->next;
50         }
51         return list;
52     }
53 };

 

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

《剑指Offer——复杂链表的复制》代码

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

Java 剑指offer(35) 复杂链表的复制

复杂链表的复制-剑指Offer

剑指Offer35.复杂链表的复制

剑指offer系列——25.复杂链表的复制