使用map的思想
//题目描述
//
//输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。
#include<windows.h>
#include<map>
#include<iostream>
using namespace std;
struct RandomListNode {
int label;
struct RandomListNode *next, *random;
RandomListNode(int x) :
label(x), next(NULL), random(NULL) {
}
};
class Solution {
public:
RandomListNode* Clone(RandomListNode* pHead)
{
if(pHead==NULL)return NULL;
RandomListNode*p=pHead;
//RandomListNode*root=(RandomListNode*)malloc(sizeof(RandomListNode));
RandomListNode*root=new RandomListNode(0);
RandomListNode*r=root;
map<RandomListNode*,RandomListNode*>m;
while(p!=NULL){
//RandomListNode*q=(RandomListNode*)malloc(sizeof(RandomListNode));
//q->label=p->label;
RandomListNode*q=new RandomListNode(p->label);
q->random=p->random;
m[p]=q;
r->next=q;
r=r->next;
p=p->next;
}
r=root->next;
while(r!=NULL){
r->random=m[r->random];
r=r->next;
}
return root->next;
}
};