/*
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 pHead;
RandomListNode* p = pHead;
RandomListNode* nn= NULL;
// 复制一遍结点
while(p){
RandomListNode* inst=(RandomListNode*)malloc(sizeof(RandomListNode));
inst->label = p->label;
nn = p->next;
p->next=inst;
inst->next=nn;
p=p->next;
}
// 完成random 因为复制使得 满足 p->next->random=p->random->next;
p = pHead;
while(p){
if(p->random->next!=0){
p->next->random=p->random->next;
}
p=p->next->next;
}
// 断开 复制连接
p = pHead;
RandomListNode* q=pHead;
RandomListNode* reHead=pHead->next;
while(p){
q=p->next;
p->next=p->next->next;
p=p->next;
if(q->next!=NULL)
q->next=q->next->next;
}
return reHead;
}
};