复杂链表的复制

2020-07-29  本文已影响0人  Crazy_Bear
/*
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) return nullptr;
         
        RandomListNode* p = pHead;
        while(p){
            RandomListNode* tmp =new RandomListNode(p->label);
            tmp->next = p->next;
            p->next = tmp;
            p = tmp->next;
        }
         
        p =  pHead;
        RandomListNode* q = nullptr;
        while(p){
            q = p->next;
            if( p->random ) 
            q->random = p->random->next;
            p = q->next;
        }
         
         
        RandomListNode* res = pHead->next;
        p = q = pHead;
        while(p){
            q = p->next;
            p->next = q->next;
            p=p->next;
            if(p)
            q->next = p->next; 
        }
        return res;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读