码迷,mamicode.com
首页 > 其他好文 > 详细

Copy List with Random Pointer

时间:2014-09-02 00:08:03      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   div   log   sp   on   c   

 这个题目是深度复制链表,就是所有节点都是新分配的空间,这一点不难做到,难的是新链表random指针的赋值,想想也没什么好办法,就用map存储两个链表的映射关系,在第一次遍历时只新建节点,建立链表,令新链表中节点的random值等于旧链表的值。第二次遍历再根据map一一映射。

 1 class Solution {
 2 public:
 3     RandomListNode *copyRandomList(RandomListNode *head) {
 4         if(head == NULL)
 5             return NULL;
 6         RandomListNode* nHead = new RandomListNode(head->label);
 7         RandomListNode* optr;
 8         RandomListNode* nptr;
 9         optr = head;
10         nptr = nHead;
11         map<RandomListNode*,RandomListNode*> m1;
12          m1[optr] = nptr;
13          nptr->random = optr->random;
14          optr = optr->next;
15         while(optr != NULL)
16         {
17            RandomListNode* tmp = new RandomListNode(optr->label);
18            nptr->next = tmp;
19            nptr = tmp;
20            nptr->random = optr->random;
21            m1[optr]=nptr;
22            optr = optr->next;
23 
24         }
25         nptr->next = NULL;
26         nptr = nHead;
27         while(nptr != NULL)
28         {
29             if(nptr->random != NULL)
30             {
31                nptr->random = m1[nptr->random];
32             }
33             nptr = nptr->next;
34         }
35         return nHead;
36     }
37 };

 

Copy List with Random Pointer

标签:style   blog   color   io   div   log   sp   on   c   

原文地址:http://www.cnblogs.com/ZhangYushuang/p/3950420.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!