合并两个有序链表

news2024/9/21 22:45:25

文章目录

  • 1.题目描述
  • 2.解题思路
  • 方法1:
  • 方法2:

1.题目描述

题目链接:力扣21,合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

在这里插入图片描述

2.解题思路

方法1:

首先我们能够想到的就是遍历一遍数组,判断两个结点的大小,将数值小的结点放在前面,数值大的不断尾插在后面。是不是听着挺简单的?

具体实现:

我们可以创建两个空指针,head用来存放链表的头结点,tail用来遍历两条链表,将两条链表链接起来。

  • 当某个链表为空时,我们可以直接返回另一条链表
  • 当两个链表都不为空时,我们可以不断比较两条链表的大小,当 head 和 tail 为空时,我们将较小的结点同时赋给 head 和 tail。然后就是比较两条list的大小,将tail指向较小的结点,并将 tail 移到它的下一个结点位置。同时也将 list 指向它的下一个结点。
  • 当一条链表遍历完后,由于链表是链接起来的,我们可以直接将尾指针 tail 指向另一条链表。这样两条链表就链接起来了。
  • 最后我们再返回头结点 head 就可以了。

在这里插入图片描述

上代码:

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
    if(list1==NULL)
    return list2;
    if(list2==NULL)
    return list1;

    struct ListNode* head=NULL;
    struct ListNode* tail=NULL;
    while(list1 && list2)
    {
        if(list1->val < list2->val)
        {
            if(head == NULL)
            {
                head = list1;
                tail = head;
                list1 = list1->next;
            }
            else
            {
                tail->next = list1;
                list1 = list1->next;
                tail = tail->next;
            }

        }
        else
        {
             if(head == NULL)
            {
                head = list2;
                tail = head;
                list2 = list2->next;
            }
            else
            {
                tail->next = list2;
                list2 = list2->next;
                tail = tail->next;
            }
        }
        if(list1)
        tail->next=list1;
        else
        tail->next=list2;
    }
    return head;
}

在这里插入图片描述

方法2:

  • 方法二和方法一差不多,我们可以创建一个带哨兵位的头结点,将小的结点不断尾插到这个带哨兵位的头节点后面,这样我们就不用判断链表是不是空链表了。
  • 所谓带哨兵位的链表,就是一个附加的链表的节点,该节点作为第一个节点,它的值域并不存储任何东西,只是为了操作的方便引用的。
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
    struct ListNode* f1=list1;
    struct ListNode* f2=list2;
    struct ListNode* head=(struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* f3=head;
   

    while(f1 && f2)
    {
        if(f1->val < f2->val)
        {
           f3->next=f1;
            f1=f1->next;
        }
        else
        {
            f3->next=f2;
            f2=f2->next;
        }
            f3=f3->next;
            f3->next=NULL;
    }
        if(f2==NULL)
         {
          f3->next=f1;
         }
         else 
        {
          f3->next=f2;
        }    
    return head->next;
}

在这里插入图片描述

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

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

相关文章

【python】多进程和多线程

【Python】多线程 概念 同一时间内能够执行多个任务 执行方式 并发&#xff1a;多个任务交替去运行 并发&#xff1a;多喝CPU中&#xff0c;多个任务是在多个CPU上运行的 一般来说&#xff1a;并发和并行是同时存在的&#xff0c;是操作系统自动调用的 实现方式 多进程实…

系统集成项目管理工程师 笔记(第九章:项目成本管理)

文章目录 9.1.1 成本与成本管理概念 329项目成本管理的过程 9.1.2 相关术语 331成本的类型&#xff08;6种&#xff09;应急储备与管理储备 9.2.3 项目成本管理计划制订的 输出 3349.3.1 项目成本估算的主要相关因素 335项目估算还需要考虑但 容易被忽视的 主要因素 9.3.2 项目…

随机森林(Random Forest)简单介绍

文章目录 随机森林&#xff08;Random Forest&#xff09;简单介绍1. 介绍2. 工作原理2.1 随机森林的基本原理2.1.1 随机采样2.1.2. 随机选特征2.1.3. 多数表决 2.2 随机森林的建模过程2.2.1. 建立多颗决策树2.2.2. 特征随机选择2.2.3. 样本随机选择2.2.4. 决策树训练与生成2.2…

发现【Stable-Diffusion WEBUI】的神奇插件:离线自动翻译中文提示词

文章目录 &#xff08;零&#xff09;前言&#xff08;一&#xff09;提示词翻译&#xff08;Prompt Translator&#xff09;&#xff08;1.1&#xff09;尚需改进 &#xff08;零&#xff09;前言 本篇主要提到了WEBUI的提示词翻译插件&#xff0c;之前我说不喜欢联网的插件&a…

【单目标优化算法】沙猫群优化算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【011】pandas处理数据的作用_#py

pandas操作 1. 导入数据库2. 修改行列名2.1 修改列名2.2 修改行名 3. 按条件筛选3.1 根据条件筛选&#xff0c;提取所有信息3.2 根据条件筛选&#xff0c;提取某列或者某几列 4. 按某行某列提取信息4.1 获取信息4.2 更改具体的值 5. 合并5.1 单列并入大数据中&#xff08;方法一…

根据虚拟地址,如何求出页号和偏移量?

方法掌握 虚拟地址划分成虚拟页号和虚拟页偏移量。 物理地址同样可划分为物理页号和物理页偏移量 如何划分&#xff0c;关键点在于页面的大小。 假设给你一个十进制表示的地址20000&#xff0c;一个页面的大小为4KB&#xff0c;那么如何找出地址20000的具体位置呢&#xff1f…

消息队列介绍

一、消息队列(MQ)概述 消息队列&#xff08;Message Queue&#xff09;&#xff0c;是分布式系统中重要的组件&#xff0c;其通用的使用场景可以简单地描述为&#xff1a; 当不需要立即获得结果&#xff0c;但是并发量又需要进行控制的时候&#xff0c;差不多就是需要使用消息队…

如何获取“上帝”的系统版本

如何获取“上帝”的系统版本 在对技术支持过程中&#xff0c;每个公司都难免会遇到这样一个困扰&#xff1a;我们的程序明明在内部环境中测试的好好的&#xff0c;但是到了客户手里总会出现各种问题。 从以往累计的经验来看&#xff0c;这类问题通常和客户的系统环境有关。所…

PHP库存管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP库存管理系统 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为PHP APACHE&#xff0c;数据库为 mysql5.0&#xff0c;使用php语言开发。 php 库…

【redis】redis分布式锁(一)手写分布式锁1.0~6.0

redis分布式锁&#xff08;入门&#xff09; 文章目录 redis分布式锁&#xff08;入门&#xff09;前言一、面试题redis的用法&#xff1a;CAP 二、锁的种类三、一个靠谱分布式锁需要具备的条件和刚需四、分布式锁五、重点六、Base案例&#xff08;bootredis&#xff09;1.0、最…

如何使用WordPress建立在线辅导网站(3个步骤)

在线辅导网站在过去几年中变得非常流行。随着越来越多的人转向远程工作和学习&#xff0c;这个行业已成为在家赚取额外收入的绝佳方式。 此外&#xff0c;提供在线指导可以帮助您成为所在领域的权威。 如果您想提供在线辅导&#xff0c;最好的方法通常是通过您自己的辅导网站…

并发编程中的三大问题剖析与解决

java并发编程中的三大问 可见性原因分析&#xff1a;解决&#xff1a; 原子性原因分析&#xff1a;解决&#xff1a; 有序性解决&#xff1a; 首先让我们来了解一下JUC JUC&#xff08;Java Util Concurrent&#xff09;是Java提供的一个并发编程工具包&#xff0c;它解决了在多…

【Linux】进程地址空间的初步理解

目录 程序地址空间空间布局图引入物理地址与虚拟地址的概念虚拟地址空间虚拟地址与物理地址是如何对应的&#xff1f;※父子进程独立性的理解&#xff08;重点&#xff09;fork两个返回值的原理地址空间为什么要存在&#xff1f;补充理解 程序地址空间空间布局图 &#xff08;这…

IDEA 新版安装教程

目录 一、安装IDEA 1、双击安装&#xff0c;然后下一步 2、修改默认安装路径&#xff0c;自定义目录。(建议所有开发工具都放在同一个盘符) 3、改为自定义安装路径&#xff0c;下一步。&#xff08;不用使用中文或空格&#xff09; 4、创建桌面图标等 5、点击安装&#x…

02.DolphinScheduler数据源中心

文章目录 MySQLHIVE数据源使用HiveServer2使用 HiveServer2 HA Zookeeper Clickhouse MySQL 填写参数 数据源&#xff1a;选择 MYSQL数据源名称&#xff1a;输入数据源的名称描述&#xff1a;输入数据源的描述IP 主机名&#xff1a;输入连接 MySQL 的 IP端口&#xff1a;输入…

一维卷积与一维平均池化的时间复杂度

计算请参考这篇文章&#xff1a; (284条消息) 卷积神经网络的时间、空间复杂度以及数据流的变化_卷积的时间复杂度_Briwisdom的博客-CSDN博客 1. 时间复杂度 时间复杂度即模型的运行次数。 单个卷积层的时间复杂度&#xff1a;Time~O(M^2 * K^2 * Cin * Cout) //有的好奇小宝…

Spring(11. 循环依赖 - 周阳)学习笔记

上一篇 &#xff1a;10. 面试问题简析 文章目录 1. Spring AOP1.1. Aop 常用注解1.2 测试前的准备工作1.2.1 业务类1.2.2 切面类 1.3 Spring4 下的测试1.3.1 POM 文件1.3.2 创建测试类1.3.3 Aop 测试结果 1.4 Spring 5 下的测试1.4.1 POM 文件1.4.2 创建测试类1.4.3 Aop 测试结…

e签宝,「进化」在2023

精准布局生态化、统一化、智能化、信创化&#xff0c;辅以具体产品落地&#xff1b;加速产业、行业、企业、业务&#xff0c;“四业”互通互联&#xff0c;提高产业数字化渗透率。电子签“群战”时代&#xff0c;e签宝再次进化。 作者|斗斗 出品|产业家 “印章在谁手上&…

Camtasia 2023版强悍来袭,会哪些新功能呢?

Camtasia Studio 是一款专门录制屏幕动作的工具&#xff0c;它能在任何颜色模式下轻松地记录 屏幕动作&#xff0c;包括影像、音效、鼠标移动轨迹、解说声音等等&#xff0c;另外&#xff0c;它还具有即时播放和编 辑压缩的功能&#xff0c;可对视频片段进行剪接、添加转场效果…