原题链接:添加链接描述
哈希:
cpp
/*
// Definition for a Node.
class Node {
public:
int val;
Node* next;
Node* random;
Node(int _val) {
val = _val;
next = NULL;
random = NULL;
}
};
*/
class Solution {
public:
Node* copyRandomList(Node* head) {
if(head==NULL) return NULL;
Node* cur = head;
unordered_map<Node*,Node*> mp;
while(cur!=NULL){
mp[cur]=new Node(cur->val);
cur=cur->next;
}
cur = head;
while(cur!=NULL){
mp[cur]->next = mp[cur->next];
mp[cur]->random = mp[cur->random];
cur=cur->next;
}
return mp[head];
}
};
拼接+拆分:
cpp
/*
// Definition for a Node.
class Node {
public:
int val;
Node* next;
Node* random;
Node(int _val) {
val = _val;
next = NULL;
random = NULL;
}
};
*/
class Solution {
public:
Node* copyRandomList(Node* head) {
if(head==NULL) return NULL;
Node* cur = head;
while(cur!=NULL){
Node* cur_copy = new Node(cur->val);
cur_copy->next = cur->next;
cur_copy->random = NULL;
cur->next = cur_copy;
cur = cur_copy->next;
}
cur = head;
while(cur!=NULL){
Node* random = cur->random;
Node* cur_copy = cur->next;
if(random!=NULL) cur_copy->random = random->next;
cur = cur_copy->next;
}
Node* node = head->next;
Node* pre = node;
int cnt=0;
cur = head;
while(cur!=NULL){
Node* cur_copy = cur->next;
cur->next = cur_copy->next;
if(cnt){
pre->next = cur_copy;
pre= cur_copy;
}
cnt++;
cur = cur->next;
}
return node;
}
};