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

Copy List with Random Pointer (16)

时间:2014-11-14 22:21:16      阅读:194      评论:0      收藏:0      [点我收藏+]

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

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.

Return a deep copy of the list.

要复制一个链表,但是要做到深度复制,如果每个链表节点中只有一个next指针的话会很容易,直接从前往后复制就行了。但是这个神奇的链表节点中有random pointer,如果采取从前往后复制的方法,可能random pointer对应的节点还没有生成,这时无法进行赋值了。可以采取这种策略,利用map key-value对  的性质,先将新生成的链表结点的random pointer指向老结点中的random pointer值。每生成一个新节点,就把新老节点的对应key-value对  存入map。等新链表的主体部分生成完毕,再利用map将新链表结点中的random pointer指向新生成的结点。

思路很简单,实现也比较容易,直接上代码了!

 1 /**
 2  * Definition for singly-linked list with a random pointer.
 3  * struct RandomListNode {
 4  *     int label;
 5  *     RandomListNode *next, *random;
 6  *     RandomListNode(int x) : label(x), next(NULL), random(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11        RandomListNode *copyRandomList(RandomListNode *head) {
12            if(!head)
13             return NULL;
14         unordered_map<RandomListNode *,RandomListNode * > map;
15         RandomListNode *tmp=NULL;
16         RandomListNode *h;
17         while(head){
18             if(tmp==NULL){
19                 tmp=new RandomListNode(head->label);
20                 tmp->random=head->random;
21                 h=tmp;
22             }
23             else{
24                 tmp->next=new RandomListNode(head->label);
25                 tmp=tmp->next;
26                 tmp->random=head->random;
27             }
28             map.insert(pair<RandomListNode *,RandomListNode *>(head,tmp));
29             head=head->next;
30         }
31         tmp=h;
32         while(tmp){
33             tmp->random=map[tmp->random];
34             tmp=tmp->next;
35         }
36         return h;
37     }
38 };

 

Copy List with Random Pointer (16)

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

原文地址:http://www.cnblogs.com/zhoudayang/p/4098174.html

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