/*
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;
    }
};