题目描述:
思路:设置一个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;
}
};