/*
// Definition for a Node.
class Node {
public:
int val;
Node* next;
Node* random;
Node(int _val) {
val = _val;
next = NULL;
random = NULL;
}
};
*/classSolution{public:
Node*copyRandomList(Node* head){// 防止重复创建,先全部创建好
unordered_map<Node*, Node*> mp;for(auto p = head; p !=nullptr; p = p->next){if(!mp.count(p)){
mp[p]=newNode(p->val);}}auto ans = head;while(head){if(head->next){
mp[head]->next = mp[head->next];}if(head->random){
mp[head]->random = mp[head->random];}
head = head->next;}return mp[ans];}};
代码(9.7 二刷看解析)
classSolution{public:
Node*copyRandomList(Node* head){
unordered_map<Node*, Node*> mp;// 指向随机节点auto p = head;while(p){// if(!mp.count(p))
mp[p]=newNode(p->val);
p = p->next;}auto ans = head;while(head){if(head->next)
mp[head]->next = mp[head->next];if(head->random)
mp[head]->random = mp[head->random];
head = head->next;}return mp[ans];}};