首页 > 代码库 > Copy List with Random Pointer

Copy List with Random Pointer

 这个题目是深度复制链表,就是所有节点都是新分配的空间,这一点不难做到,难的是新链表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