5_11复杂链表的复制

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。

/*
struct RandomListNode {
    int label;
    struct RandomListNode *next, *random;
    RandomListNode(int x) :
            label(x), next(NULL), random(NULL) {
    }
};
*/
class Solution {
public:
    // 复制节点
    void duplicate(RandomListNode* pHead)
    {
        RandomListNode* idx = pHead;
        while(idx){
            RandomListNode* duplicate_node = new RandomListNode(idx->label);
            duplicate_node->next = idx->next;
            idx->next = duplicate_node;
            idx = duplicate_node->next;
        }
    }

    // 调整复制后的节点的random
    void adjust_dp(RandomListNode* pHead)
    {
        RandomListNode* idx = pHead;
        RandomListNode* duplicate_node = idx->next;
        while(idx){
            duplicate_node = idx->next;
            if(idx->random){
                duplicate_node->random = idx->random->next;
            }
            idx = duplicate_node->next;
        }
    }

    // 分离大链表
    RandomListNode* split_list(RandomListNode* pHead)
    {
        RandomListNode* pHead_dp = pHead->next;
        RandomListNode* idx = pHead, *idx_dp = pHead_dp;
        while(idx->next->next){
            idx->next = idx_dp->next;
            idx_dp->next = idx_dp->next->next;
            idx = idx->next;
            idx_dp = idx_dp->next;
        }
        idx->next = NULL;
        return pHead_dp;
    }
    
    RandomListNode* Clone(RandomListNode* pHead)
    {
        if(!pHead){return NULL;}
        // 复制节点
        duplicate(pHead);
        // 调整复制节点的random指针
        adjust_dp(pHead);
        // 分离复制的链表
        return split_list(pHead);
//        return pHead;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作为一个资深的新手程序员😂,链表这些既基础又深奥的东西是日常工作中并不常见,但是却非常重要,所以就总结一下链表的简...
    Clark_new阅读 4,319评论 4 12
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,234评论 0 12
  • Redis为什么用跳表而不用平衡树? 本文是《Redis内部数据结构详解》系列的第六篇。在本文中,我们围绕一个Re...
    meng_philip123阅读 4,040评论 0 26
  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,820评论 24 1,002
  • 心事数茎白发, 生涯一片青山。 空林有雪相待, 古道无人独还。 【唐】张继 (138x34cm) 兰若生春夏, 芊...
    刘伟书法_沈阳阅读 394评论 13 13