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

Leetcode 138. Copy List with Random Pointer

时间:2018-07-14 13:01:35      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:random   ini   public   back   操作   link   cto   code   ret   

/**
 * Definition for singly-linked list with a random pointer.
 * struct RandomListNode {
 *     int label;
 *     RandomListNode *next, *random;
 *     RandomListNode(int x) : label(x), next(NULL), random(NULL) {}
 * };
 */
class Solution {
public:
    RandomListNode *copyRandomList(RandomListNode *head) {
        std::map<RandomListNode *, int> node_map;
        std::vector<RandomListNode *> node_vec;
        RandomListNode * ptr = head;
        int i=0;
        while(ptr)
        {
            node_vec.push_back(new RandomListNode(ptr->label));
            node_map.insert(make_pair(ptr, i));
            ptr = ptr->next;
            ++i;
        }
        node_vec.push_back(0);
        ptr = head;
        i = 0;
        while(ptr)
        {
            node_vec[i]->next = node_vec[i+1];
            if(ptr->random)
            {
                int id = node_map[ptr->random];
                node_vec[i]->random = node_vec[id];
            }
            ptr = ptr->next;
            i++;
        }
        return node_vec[0];
    }
};

这个是借助了映射的概念,用了额外的存储空间,其实可以不用额外的存储空间,将新节点增添到对应节点的后面,这样统一进行操作就方便了。

Leetcode 138. Copy List with Random Pointer

标签:random   ini   public   back   操作   link   cto   code   ret   

原文地址:https://www.cnblogs.com/randyniu/p/9308959.html

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