leetcode 13:copy-list-with-random-pointer

题目描述

现在有一个这样的链表:链表的每一个节点都附加了一个随机指针,随机指针可能指向链表中的任意一个节点或者指向空。
请对这个链表进行深拷贝。
题目分析:
如果要做到深拷贝,分一下三个步骤:1.分别创建新链表的节点,插入到旧表中 2.根据旧表中的节点复制随机指针 3.剥离旧表和新表,返回新表的头结点。注意指针间的处理即可,属于常规题
代码如下:
 1 RandomListNode *copyRandomList(RandomListNode *head) {
 2         RandomListNode* copy;
 3         RandomListNode* cur;
 4         if(!head)
 5             return NULL;
 6         cur = head;
 7         //插入旧表中
 8         while(cur)
 9         {
10             copy = new RandomListNode(cur->label);
11             copy->next = cur->next;
12             cur->next = copy;
13             cur = cur->next->next;
14         }
15         //复制随机指针
16         cur = head;
17         while(cur)
18         {
19             copy = cur->next;
20             copy->random = (cur->random?cur->random->next:NULL);
21             cur = copy->next;
22         }
23         //复制的链表从旧表中剥离
24         cur = head;
25         copy = cur->next;
26         head = copy;
27         while(cur)
28         {
29             cur->next = copy->next;
30             cur = cur->next;
31             copy->next = (cur?cur->next:NULL);
32             copy = copy->next;
33         }
34         return head;
35     }
原文地址:https://www.cnblogs.com/qingjiaowoxiaoxioashou/p/13496364.html