算法大神对小码农说复制随机链表可以单独拿出来讲讲

简介: 算法大神对小码农说复制随机链表可以单独拿出来讲讲

文章目录


复制带随机指针的链表

天下傻逼独一个就是我,我忘记了选c语言,用c++结果错误看一脸懵逼

image.png

题目

image.pngimage.png

这题链表的复制难的地方就是随机指针random  如何复制他的指向,很多人的确想到了malloc节点,我也想到了malloc一个一个的节点,但是基本所有人都卡死在这里了,就是我们如何链,在这里我们就会又遇到先天性大佬的天赋思维力的压制,上一题是空间联想的压制。(来吧我小码农就喜欢给先天以及后天的大佬锤炼)

思想

普通拷贝

image.png

实际上想到这样也已经了不起了,有点磨具雏形了

顺藤摸瓜(这个是真的奇兵记,暗度陈仓的感觉)

image.png

脱裤子还需提裤子人(上面暗度陈仓,这个就是单刀直入)

image.png

代码实现

3.gif

4.gif

cur为NULL的时候就是停止copy的时候
  struct Node* cur = head;
    if(!cur)
        return NULL;
    while(cur)
    {
        //每次我们都要malloc一个copy节点
        struct Node* copy = (struct Node*)malloc(sizeof(struct Node));
        //开始给数据
        copy->val = cur->val;
        //开始插入
        copy->next = cur->next;
        cur->next = copy;
        //开始cur移动
        cur = copy->next;
    }


003.gif

有人说为什么不在上面malloc节点的时候就链,因为那时候小孩还没出生你就让你的还在上学吗,没错为了卷你们,我准备偷偷生个小孩
 //节点copy好后开始random相链
    cur = head;
    while(cur)
    {
        //重新把之前开辟的节点给copy维护
        struct Node* copy = cur->next;
        if(cur->random == NULL)
            copy->random = NULL;
        else
            copy->random = cur->random->next;//上面的GIF的核心代码       
        cur = copy->next;  
    }


5.gif

然后拿下来一个个尾插,就是单刀直入你要还原原来的链表顺序

 //开始一个一个尾插起来
    struct Node* copyHead = NULL;
    struct Node* copyTail = NULL;
    cur = head;
    while(cur)
    {
        //重新把之前开辟的节点给copy维护
        struct Node* copy = cur->next;
        //这边你需要一个next来还原原来链表顺序,你不能用完人家对人家不负责任
        struct Node* next = copy->next;
        if(copyHead == NULL)
        {
            copyHead = copy;
            copyTail = copy;
        }
        else
        {
            copyTail->next = copy;
            copyTail = copy;
        }        
        cur->next = next;//这一步看你对原来链表负不负责任
        cur = next;
    }
    return copyHead;

image.png

struct Node* copyRandomList(struct Node* head) {
  struct Node* cur = head;
    if(!cur)
        return NULL;
    while(cur)
    {
        //每次我们都要malloc一个copy节点
        struct Node* copy = (struct Node*)malloc(sizeof(struct Node));
        //开始给数据
        copy->val = cur->val;
        //开始插入
        copy->next = cur->next;
        cur->next = copy;
        //开始cur移动
        cur = copy->next;
    }
    //节点copy好后开始random相链
    cur = head;
    while(cur)
    {
        //重新把之前开辟的节点给copy维护
        struct Node* copy = cur->next;
        if(cur->random == NULL)
            copy->random = NULL;
        else
            copy->random = cur->random->next;//上面的GIF的核心代码       
        cur = copy->next;  
    }
    //开始一个一个尾插起来
    struct Node* copyHead = NULL;
    struct Node* copyTail = NULL;
    cur = head;
    while(cur)
    {
        //重新把之前开辟的节点给copy维护
        struct Node* copy = cur->next;
        //这边你需要一个next来还原原来链表顺序,你不能用完人家对人家不负责任
        struct Node* next = copy->next;
        if(copyHead == NULL)
        {
            copyHead = copy;
            copyTail = copy;
        }
        else
        {
            copyTail->next = copy;
            copyTail = copy;
        }        
        cur->next = next;//这一步看你对原来链表负不负责任
        cur = next;
    }
    return copyHead;
}


目录
相关文章
|
16天前
|
存储 机器学习/深度学习 算法
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
79 29
|
16天前
|
存储 算法 C语言
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
72 25
|
3月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
3月前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
4月前
|
存储 缓存 算法
经典算法之链表篇(三)
经典算法之链表篇(三)
107 4
|
4月前
|
算法
经典算法之链表篇(二)
经典算法之链表篇(二)
|
4月前
|
算法 索引
经典算法之链表篇
经典算法之链表篇
|
1天前
|
传感器 算法
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
本项目基于遗传算法(GA)优化多机无源定位系统的GDOP,使用MATLAB2022A进行仿真。通过遗传算法的选择、交叉和变异操作,迭代优化传感器配置,最小化GDOP值,提高定位精度。仿真输出包括GDOP优化结果、遗传算法收敛曲线及三维空间坐标点分布图。核心程序实现了染色体编码、适应度评估、遗传操作等关键步骤,最终展示优化后的传感器布局及其性能。
|
1天前
|
机器学习/深度学习 算法 安全
基于深度学习的路面裂缝检测算法matlab仿真
本项目基于YOLOv2算法实现高效的路面裂缝检测,使用Matlab 2022a开发。完整程序运行效果无水印,核心代码配有详细中文注释及操作视频。通过深度学习技术,将目标检测转化为回归问题,直接预测裂缝位置和类别,大幅提升检测效率与准确性。适用于实时检测任务,确保道路安全维护。 简介涵盖了算法理论、数据集准备、网络训练及检测过程,采用Darknet-19卷积神经网络结构,结合随机梯度下降算法进行训练。
|
2天前
|
算法 数据可视化 数据安全/隐私保护
一级倒立摆平衡控制系统MATLAB仿真,可显示倒立摆平衡动画,对比极点配置,线性二次型,PID,PI及PD五种算法
本课题基于MATLAB对一级倒立摆控制系统进行升级仿真,增加了PI、PD控制器,并对比了极点配置、线性二次型、PID、PI及PD五种算法的控制效果。通过GUI界面显示倒立摆动画和控制输出曲线,展示了不同控制器在偏转角和小车位移变化上的性能差异。理论部分介绍了倒立摆系统的力学模型,包括小车和杆的动力学方程。核心程序实现了不同控制算法的选择与仿真结果的可视化。
31 15

热门文章

最新文章