美文网首页
复杂链表的复制

复杂链表的复制

作者: Crazy_Bear | 来源:发表于2020-07-29 07:49 被阅读0次
    • 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
    • 在每个结点后面复制一个与其相同的结点,操作之后删除原节点
    • 原结点如果存在nullptr,则其复制结点也设置为nullptr
    • C++ 代码
    /*
    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;
        }
    };
    

    相关文章

      网友评论

          本文标题:复杂链表的复制

          本文链接:https://www.haomeiwen.com/subject/skdjlktx.html