导航

LeetCode138:Copy List with Random Pointer

Posted on 2018-02-12 12:44  老刘想当个AI工程师  阅读(110)  评论(0)    收藏  举报

/**
* 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)); //push_back这个数据单元的值
node_map[ptr]=i; //插入map 第一个的i是0 key:地址 value:第几个 逻辑位置
ptr=ptr->next;
i++;
}

node_vec.push_back(0);//vector中的最后一个元素 方便统一处理
ptr = head;
i=0;

while(ptr){
node_vec[i]->next = node_vec[i+1];//next的连接
if(ptr->random){ //random的连接
int id = node_map[ptr->random];
node_vec[i]->random = node_vec[id];
}
ptr = ptr->next;
i++;
}

return node_vec[0];
}
};