題目描述:
思路:設置一個map,用來存放舊鏈表節點和新鏈表節點,(key,value)->(舊鏈表節點,新鏈表節點)
注意:這道題不要被他給的樣例所迷惑,對應的下標random_index根本沒用,就按照正常思路求解即可
/*
// Definition for a Node.
class Node {
public:
int val;
Node* next;
Node* random;
Node() {}
Node(int _val, Node* _next, Node* _random) {
val = _val;
next = _next;
random = _random;
}
};
*/
class Solution {
public:
Node* copyRandomList(Node* head) {
if(head==NULL)
return NULL;
map<Node*,Node*> hash;
Node* point=head;
Node* res=NULL;
Node* q=NULL;
while(point){
Node* q1=new Node(point->val,NULL,NULL);
hash.insert(pair<Node*,Node*>(point,q1));
if(res==NULL){
res=q=q1;
}
q->next=q1;
q=q1;
point=point->next;
}
point=head;
q=res;
while(point){
if(point->next==NULL)
q->next=NULL;
else{
q->next=hash[point->next];
}
if(point->random==NULL)
q->random=NULL;
else{
q->random=hash[point->random];
}
point=point->next;
q=q->next;
}
return res;
}
};