标签: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