复杂链表的复制

题目描述

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。
 
 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         if(pHead == NULL)
15             return NULL;
16 
17         RandomListNode* p = pHead;
18         std::map<int,RandomListNode*> mm;
19         while(p!= NULL)
20         {
21             RandomListNode* ptem = new RandomListNode(p->label);
22             mm[p->label] = ptem;
23             p = p->next;
24         }
25         p = pHead;
26         while(p != NULL)
27         {
28             if(p->next != NULL)
29             mm[p->label]->next = mm[p->next->label];
30             if(p->random != NULL)
31             mm[p->label]->random = mm[p->random->label];
32             p = p->next;
33         }
34         return mm[pHead->label];
35     }
36 };
原文地址:https://www.cnblogs.com/xiaoyesoso/p/5156100.html