当前位置: 首页 > article >正文

【数据结构】【链表代码】随机链表的复制

/**
 * Definition for a Node.
 * struct Node {
 *     int val;
 *     struct Node *next;
 *     struct Node *random;
 * };
 */

typedef struct Node Node;
struct Node* copyRandomList(struct Node* head) {
    if(head==NULL)
        return NULL;
    //1.拷贝结点,连接到原结点的后面
    Node*cur=head;
    while(cur){
        Node*copy=(Node*)malloc(sizeof(Node));
        copy->next=NULL;
        copy->random=NULL;
        copy->val=cur->val;
        // //相当于插入
        // copy->next=cur->next;
        // cur->next=copy;
        Node*next=cur->next;
        cur->next=copy;
        copy->next=next;

        cur=next;
    }

    //2.处理拷贝结点的random
    cur=head;
    while(cur){
        Node*copy=cur->next;
        if(cur->random)
            copy->random=cur->random->next;
        else
            copy->random=NULL;
        cur=cur->next->next;
    }

    //3.拆
    cur=head;
    Node*copyHead=head->next;//因为函数最后返回的是头指针
    while(cur){
        Node*copy=cur->next;
        Node*next=cur->next->next;

        cur->next=next;
        if(next)
            copy->next=next->next;
        else
            copy->next=NULL;
        cur=next;
    }
    return copyHead;
}


http://www.kler.cn/news/335201.html

相关文章:

  • wordpress运行环境 php版本过低提示及解决办法
  • 猫头虎深度解读:过去2周,AI领域的十大突破事件与未来展望
  • Windows 11 安装配置 Git 教程
  • 生信初学者教程(十六):GO富集分析
  • 保险丝基础知识
  • Java研发笔记6——C语言程序设计学习笔记5
  • Docker 多节点监控系统实战:Prometheus 与 Grafana 部署全攻略
  • [图形学]smallpt代码详解(1)
  • Unity网络开发记录(五):二进制传输消息类
  • internal.KaptWithoutKotlincTask$KaptExecutionWorkAction 问题 ---Room数据库
  • Stream流的终结方法(一)
  • 【小沐学GIS】QGIS导入导出OpenStreetMap数据(QuickMapServices、OSM)
  • 通信工程学习:什么是IGMP因特网组管理协议
  • 余承东直播论道智能驾驶:激光雷达不可或缺,华为ADS 3.0引领安全创新
  • 【2023工业3D异常检测文献】M3DM: 基于混合融合的多模态工业异常检测方法
  • MySQL事务日志—redo日志介绍
  • SQL自用小结
  • Redis实现每日签到(大数据量)
  • EXCEL图片链接快速批量转成图片
  • Go基础学习09-多协程资源竞争、sync.Mutex、sync.Cond、chan在多协程对共享变量的资源竞争中的使用