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

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
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;
    }
};

  

 

 

posted @   XieXinBei0318  阅读(94)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示