【每日一题】leetcode21 - - 合并两个有序链表

news2024/11/16 12:32:50

文章目录

  • 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/465091.html

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

相关文章

牛客网Verilog刷题——VL38

牛客网Verilog刷题——VL38 题目答案 题目 设计一个自动贩售机&#xff0c;输入货币有三种&#xff0c;为0.5/1/2元&#xff0c;饮料价格是1.5元&#xff0c;要求进行找零&#xff0c;找零只会支付0.5元。需要注意的是&#xff0c;投入的货币会自动经过边沿检测并输出一个在时钟…

【采坑专栏】【错误记录】起系统

doc说明 一级标题分大的&#xff0c;二级标题尽量加&#xff0c;三级标题是具体问题 语法 我的老毛病-易错的 多驱 复制粘贴导致前后一样 管脚约束还是直接选吧 多驱动 Vivado WARNING&#xff1a;Multi-driven net Q with xth driver pin 警告的原因和消除方法 出现这…

注意力机制:基于Yolov8的Triplet注意力模块,即插即用,效果优于cbam、se,涨点明显

论文&#xff1a;https://arxiv.org/pdf/2010.03045.pdf 本文提出了可以有效解决跨维度交互的triplet attention。相较于以往的注意力方法&#xff0c;主要有两个优点&#xff1a; 1.可以忽略的计算开销 2.强调了多维交互而不降低维度的重要性&#xff0c;因此消除了通道和权…

STM32F4_SRAM中调试代码

目录 1. 在RAM中调试代码 2. STM32的三种存储方式 3. STM32的启动方式 4. 实验过程 通过上一节的学习&#xff0c;我们已经了解了SRAM静态存储器&#xff1b; 1. 在RAM中调试代码 一般情况下&#xff0c;我们在MDK中编写工程应用后&#xff0c;调试时都是把程序下载到芯片…

Android类似微信聊天页面教程(Kotlin)四——数据本地化

前提条件 安装并配置好Android Studio Android Studio Electric Eel | 2022.1.1 Patch 2 Build #AI-221.6008.13.2211.9619390, built on February 17, 2023 Runtime version: 11.0.150-b2043.56-9505619 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Windows 11 …

Flink从入门到精通之-07处理函数

Flink从入门到精通之-07处理函数 之前所介绍的流处理 API&#xff0c;无论是基本的转换、聚合&#xff0c;还是更为复杂的窗口操作&#xff0c;其实都是基于 DataStream 进行转换的&#xff1b;所以可以统称为 DataStream API&#xff0c;这也是 Flink 编程的核心。而我们知道…

同样是测试,你年薪50W,我年薪10W,我哭了...

软件测试可以拿到年薪50万&#xff1f; 开什么玩笑&#xff1f; 我才月薪15K。 小伙伴看到标题是不是一开始的反应是这样的&#xff1f;是的话举一个小爪爪吧&#xff01; 那软件测试到底能不能拿到年薪50万呢&#xff1f; 没有吃过猪肉还没见过猪跑吗&#xff0c;你自己没…

【云原生-深入理解Kubernetes-1】容器的本质是进程

文章目录 &#x1f479; 关于作者一、为什么会出现容器&#xff1f;二、容器是什么&#xff1f;三、容器“边界”的实现手段3.1、进程如何运行的&#xff1f;3.2、Namespace 与 Docker 边界容器的本质是一个进程这是怎么做到的呢&#xff1f; 总结✊ 最后参考 &#x1f479; 关…

践行公益担当|人情如故,爱心依旧

爱心助学 情暖童心 随着改革开放&#xff0c;少数民族地区发生了翻天覆地的变化&#xff0c;城乡经济持续发展&#xff0c;人民生活水平日益提高。但对于很多居住在偏远山区的民族自然村&#xff0c;由于山区的地形限制&#xff0c;自然生存环境恶劣&#xff0c;交通及文化、教…

Android 项目必备(四十五)-->2023 年如何构建 Android 应用程序

Android 是什么 Android 是一种基于 Linux 内核并由 Google 开发的开源操作系统。它用于各种设备包括智能手机、平板电脑、电视和智能手表。 目前&#xff0c;Android 是世界上移动设备使用最多的操作系统; 根据 statcounter 的一份最近 12 个月的样本报告;Android 的市场份额…

C++ 编程笔记(本人出品,必属精品)

文章目录 Part.I IntroductionChap.I 快应用 Part.II C 基础Chap.I 一些待整理的知识点Chap.I 常用的库或类 Part.III 杂记Part.X Others WorkChap.I 大佬的总结Chap.II 大佬的轮子 Part.I Introduction 前言&#xff1a;C 用的人还是比较多的&#xff0c;主要是它比较快并且面…

2023-4-26-C++11新特性之正则表达式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

太为难我了,阿里面试了7轮...

前言 今年的大环境非常差&#xff0c;互联网企业裁员的现象比往年更严重了&#xff0c;可今年刚好是我的第一个“五年计划”截止的时间点&#xff0c;说什么也不能够耽搁了&#xff0c;所以早早准备的跳槽也在疫情好转之后开始进行了。但是&#xff0c;不得不说&#xff0c;这…

SOLIDWORKS认证考试流程

一、SOLIDWORKS认证考试前的准备工作 1、检查电脑硬件设备是否可以正常使用&#xff0c;如键盘鼠标等。 2、检查Solidworks软件是否可以正常使用。 3、关闭电脑所有杀毒软件。 4、检查电脑网络&#xff08;外网&#xff09;是否正常。 5.请联系我们获取考试系统软件安装包。…

redis面试题(二)附答案

书接上回&#xff0c;接着分享面试题&#xff0c;最近开发了几个小伙伴的项目&#xff0c;耽误更新了&#xff0c;来点干货&#xff0c;表示歉意。大家有需求也可以找小编。 2、缓存穿击 业务通常会有几个数据会被频繁地访问&#xff0c;比如秒杀活动&#xff0c;这类被频地访…

好程序员:前端JavaScript全解析——Canvas绘制形状(上)

●今天&#xff0c;我们来通过 canvas 提供的方法开绘制一些简单的形状绘制矩形 绘制基础矩形。下面一起看看好程序员老师的讲解吧~ ●语法 : 工具箱.rect( 矩形起点 x 轴坐标, 矩形起点 y 轴坐标, 矩形宽度, 矩形高度 ) // 0. 获取到页面上的 canvas 标签元素节点 const canva…

Camtasia2023简体中文标准版免费更新下载

Camtasia专业的 屏幕录制和视频剪辑软件3000多万专业人士在全球范围内使用Camtasia展示产品&#xff0c;教授课程&#xff0c;培训他人&#xff0c;以更快的速度和更吸引人的方式进行沟通和屏幕分享。使您在Windows和Mac上进行录屏和剪辑创作专业外观的视频变得更为简单。 Camt…

Vue3 element-plus el-select 无法选中,又不报错

html 结构 <el-form :model"conditionForm"ref"conditionForm"label-width"100px" class"demo-ruleForm"><el-selectv-model"conditionForm.personnel"multipleplaceholder"Select"style"width: 2…

知网导入EndNote

首先进入知网&#xff0c;搜索你想要找的期刊论文。 选择EndNote 点击导出 浏览器自动下载以txt为后缀的文件 导入到EndNote中

【C++】异常,你了解了吗?

在之前的C语言处理错误时&#xff0c;会通过assert和错误码的方式来解决&#xff0c;这导致了发生错误就会直接把程序关闭&#xff0c;或者当调用链较长时&#xff0c;就会一层一层的去确定错误码&#xff0c;降低效率&#xff0c;所以c针对处理错误&#xff0c;出现了异常&…