题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。
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 };