/*
// Definition for a Node.
class Node {
public:
int val;
Node* next;
Node* random;
Node(int _val) {
val = _val;
next = NULL;
random = NULL;
}
};
*/
//这里使用stl 的map 来实现
class Solution {
public:
Node* copyRandomList(Node* head) {
std::map<Node *,int> node_map;
std::vector<Node *>node_vec;
Node *ptr =head; //不改变原来的head
int i=0;
//得到 新的节点的值 ,并将它放在vec中,并且做了地址到索引的映射;
while(ptr){
node_vec.push_back(new Node(ptr->val));
node_map[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];
}
};