首页 > 其他 > 详细

【剑指Offer】【链表】复杂链表的复制

时间:2019-08-30 15:09:46      阅读:63      评论:0      收藏:0      [点我收藏+]

题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空

技术分享图片

 

/*
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 == nullptr)
        {
            return nullptr;
        }
        //将链表每个结点复制一个克隆,放在该节点的后一位
        RandomListNode *pNode = pHead;
        while(pNode != nullptr)
        {
            RandomListNode *pClone = new RandomListNode(pNode->label);
            pClone->next = pNode->next;
            pClone->random = nullptr;
            
            pNode->next = pClone;
            pNode = pClone->next;
        }
        //设置克隆结点的random
        pNode = pHead;
        while(pNode != nullptr)
        {
            RandomListNode *pClone = pNode->next;
            if(pNode->random != nullptr)
            {
                pClone->random = pNode->random->next;
            }
            pNode = pClone->next;
        }
        //将链表拆分
        pNode = pHead;
        RandomListNode *pCloneHead = pHead->next;
        while(pNode->next != nullptr)
        {
            RandomListNode *ptmp = pNode->next;
            pNode->next = ptmp->next;
            pNode = ptmp;
        }
        return pCloneHead;
    }
};

  

 技术分享图片

 

【剑指Offer】【链表】复杂链表的复制

原文:https://www.cnblogs.com/xiexinbei0318/p/11434425.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!