链表收尾(8.2)

news2024/10/7 6:33:06

 例题解析

138. 随机链表的复制 - 力扣(LeetCode)

1.拷贝节点插入原节点的后面(核心)

这样做的目的是方便找 random 节点,知道原节点可以找 random,知道上一个 random 可以找下一个 random 。

    struct Node* cur=head;
    while(cur)
    {
        //通过一前一后两个指针来插入节点
        struct Node* next=cur->next;
        struct Node* copy=(struct Node*)malloc(sizeof(struct Node));
        copy->val=cur->val;
        //链接
        cur->next=copy;
        copy->next=next;
        //cur移动
        cur=next;
    }

2.放置每个拷贝节点的 random 

我们可以通过原节点的 random 轻松找到拷贝的 random 

    cur=head;
    //放置拷贝节点的random
    while(cur)
    {
        //从cur的下一个节点开始遍历
        struct Node* copy=cur->next;
        //如果原节点的random为空,拷贝节点的random也为空
        if(cur->random==NULL)
        {
            copy->random=NULL;
        }
        else
        //否则拷贝节点的random等于原节点的random的拷贝节点
        {
            copy->random=cur->random->next;
        }
        //cur后移动一位
        cur=copy->next;
    }

3.将拷贝节点与原链表解开,尾插到一起,并恢复原链表的链接

    cur=head;    
//创建新链表的头尾节点便于插入
    struct Node* copyhead=NULL,*copytail=NULL;
    while(cur)
    {
        struct Node* copy=cur->next;
        struct Node* next=copy->next;
        //copy节点尾插到新链表
        if(copyhead==NULL)
        {
        copy= copyhead=copytail;
        }
        else
        {
            copytail->next=copy;
            copytail=copytail->next;
        }
        //恢复原节点
        cur->next=next;

        cur=next;
    }

完整代码:

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

struct Node* copyRandomList(struct Node* head) {
    //拷贝节点到原节点的后面
    struct Node* cur=head;
    while(cur)
    {
        //通过一前一后两个指针来插入节点
        struct Node* next=cur->next;
        struct Node* copy=(struct Node*)malloc(sizeof(struct Node));
        copy->val=cur->val;
        //链接
        cur->next=copy;
        copy->next=next;
        //cur移动
        cur=next;
    }
    cur=head;
    //放置拷贝节点的random
    while(cur)
    {
        //从cur的下一个节点开始遍历
        struct Node* copy=cur->next;
        //如果原节点的random为空,拷贝节点的random也为空
        if(cur->random==NULL)
        {
            copy->random=NULL;
        }
        else
        //否则拷贝节点的random等于原节点的random的拷贝节点
        {
            copy->random=cur->random->next;
        }
        //cur后移动一位
        cur=copy->next;
    }
    cur=head;
    //创建新链表的头尾节点便于插入
    struct Node* copyhead=NULL,*copytail=NULL;
    while(cur)
    {
        struct Node* copy=cur->next;
        struct Node* next=copy->next;
        //copy节点尾插到新链表
        if(copytail==NULL)
        {
        copyhead=copytail=copy;
        }
        else
        {
            copytail->next=copy;
            copytail=copytail->next;
        }
        //恢复原节点
        cur->next=next;

        cur=next;
    }
    return copyhead;
}

4.顺序表和链表的区别

拓展学习:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1118227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四、基本组件

1. Designer设计师 Designer程序是Qt官方推出的专为设计人员使用的UI设计工具,程序员可以使用此工具大幅降低UI设计的代码量。 Designer设计文件的格式是.ui,需要配合同名的头文件与源文件使用。.ui文件通常被称为界面文件,其内部是xml语法的…

(2023|ICML,LLM,标记掩蔽,并行解码)Muse:使用掩蔽生成 Transformer 的文本到图像生成

Muse: Text-To-Image Generation via Masked Generative Transformers 公众号:EDPJ(添加 VX:CV_EDPJ 或直接进 Q 交流群:922230617 获取资料) 目录 0. 摘要 1. 简介 2. 模型 2.1. 预训练文本编码器 2.2. 使用 V…

RabbitMQ队列及交换机的使用

目录 一、简单模型 1、首先控制台创建一个队列 2、父工程导入依赖 3、生产者配置文件 4、写测试类 5、消费者配置文件 6、消费者接收消息 二、WorkQueues模型 1、在控制台创建一个新的队列 2、生产者生产消息 3、创建两个消费者接收消息 4、能者多劳充分利用每一个消…

Power BI 傻瓜入门 2. Power BI的人员、方式和内容

本章内容包括: 识别潜在的企业Power BI用户使用Power BI解决数据生命周期问题区分使用Power BI生产的分析产品的类型 企业商业智能(BI)解决方案并非一刀切,这就是为什么像微软这样的供应商在Power BI利基市场的产品营销和分销中…

unity NPR 卡通渲染

文章目录 一、 介绍二、 素材准备三、 步骤四、 shader代码五、工程链接 一、 介绍 NPR是计算机图形学中的一类,即非真实感绘制(Non-photorealistic rendering),主要用于模拟艺术式的绘制风格,也用于发展新绘制风格,形式一般是卡…

零基础Linux_20(进程信号)内核态和用户态+处理信号+不可重入函数+volatile

目录 1. 内核态和用户态 1.1 内核态和用户态概念 1.2 内核态和用户态转化 2. 处理信号 2.2 捕捉信号 2.2 系统调用sigaction 3. 不可重入函数 4. volatile关键字 5. SIGCHLD信号(了解) 6. 笔试选择题 答案及解析 本篇完。 1. 内核态和用户态…

气象台使用vr模拟仿真实训教学降低成本投入

气候仿真实验室用于模拟高低温、高湿、干燥、阳光光照、降雨、降雪、覆冰、雾天与强风等多种环境适应性试验等气候和环境条件,在环境试验中,温度、湿度、光照、降雨这些常见的仿真环境都很容易实现。而比较少见的雾天、强风、降雪等环境就比较难。因此为…

《动手学深度学习 Pytorch版》 9.8 束搜索

本节将介绍几大: 贪心搜索(greedy search)策略 穷举搜索(exhaustive search) 束搜索(beam search) 9.8.1 贪心搜索 贪心搜索已用于上一节的序列预测。对于输出序列的每一时间步 t ′ t t′…

【FPGA零基础学习之旅#16】嵌入式块RAM-双口ram的使用

🎉欢迎来到FPGA专栏~双口ram的使用 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大家能指正…

SystemVerilog学习(3)——数组

一、定宽数组 相比于Verilog-1995中的一维定宽数组,SV提供了更加多样的数组类型,功能上也大大增强。 1.1 定宽数组的声明与初始化 Verliog要求在声明中必须给出数组的上下界。因为几乎所有的数组都使用0作为索引下届,所以SV允许只给出数组的…

UART、SPI、I2C通信协议超全入门教程

本文引注: https://mp.weixin.qq.com/s/lVWK8xlDt7cOLi8WHYSuPg 1.SPI协议 1.基础 2.简介 3.工作原理 4.SPI数据传输步骤与优缺点 2.UART协议

抖音同城榜:探索城市新潮流

随着科技的飞速发展,短视频已经成为了人们日常生活中不可或缺的一部分。作为短视频领域的佼佼者,抖音一直致力于为用户带来更丰富、更有趣的短视频内容。抖音同城榜应运而生,成为了最新、最热门的话题聚集地,吸引了大量潮流达人和…

Java SSL/TLS证书认证逻辑

前言 最近做项目使用httpclient转发https请求,但是遇到一些坑,尤其是证书的认证,证书认证一般都是单向的,除非相互访问,证书一般基于host,但是如果访问需要ip,那么JDK默认的认证就会不通过&…

Unity⭐️Win和Mac安卓打包环境配置

文章目录 🟥 配置Android SDK1️⃣ 配置 SDK Platforms2️⃣ 配置 SDK Tools🎁 Android SDK Build-Tools🎁 Android SDK Command-line Tools(latest)🎁 Android SDK Tools(Obsolete)🟧 配置NDK🟩 配置JDK前情提示: 此方法适用于Windows/Mac 在配置时注意开启 🪜 …

shell变量之学习笔记

shell变量之学习笔记 Shell变量概念1 shell变量分类:2 变量的赋值3 变量赋值格式:4 变量命名方式5 变量声明6 变量引用7 变量清除8 变量只读9 内部参数变量10 位置参数变量11 退出和返回状态12 命令替换13 read命令14 字符串长度与截取15 字符串替换16 变…

FL studio21永久激活码 附带一键下载安装包

玩音乐的朋友,对FL studio肯定不陌生,目前最新的版本是FL studio21,这是一款非常强大且专业的音频制作软件,而且还可以编曲、剪辑、录音、混音等等之类的创作操作,使你的计算机成为一个全功能录音室。下面小编就来和大…

15.Tensor Product vs. Kronecker Product

此处是为澄清她两的区别, 这两个事物 都用的相同的符号表示, 即这个圈数符号, 它在数学中有许多不同的含义, 本文讨论的是:“张量积”,它是对张量的运算; 以及“Kronecker ”积,…

C#WPFPrism框架模块化应用实例

本文实例演示C#WPFPrism框架模块化应用实例。 首先创建WPF项目,修改App相关文件内容,以便使用prism。 一、添加模块 解决方案中添加ModuleA和ModuleB两个项目 删除不用的窗体,添加自定义窗体 修改ModuleA和ModuleB的输出类型

最近又火了!吴恩达《生成式 AI》重磅发布!

吴恩达教授可能是许多人接触 AI 的启蒙课导师吧,在过去的十多年中,他的《Machine Learning》课程已经对数百万的学习者产生了积极影响。 而随着 ChatGPT 的推出,大模型和各类生成式人工智能(GenAI)技术在行业内外备受…

激活WinEdt 11.1

激活WinEdt 11.1 打开WinEdt 11.1,点击help 点击Register WinEdtname输入:*60[20220501] Warez_Down [RU-BOARD] (100 users)Code输入:4049089118892183088 即可激活。 参考文章https://blog.csdn.net/j_l_sheng/article/details/125456662