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

leetcode -- 21. 合并两个有序链表

在这里插入图片描述

🐨目录

    • 📑1. 题目
    • 🛶2. 解法- 头插到新链表
      • 🐬2.1 思路
      • 🐬2.1 代码实现
    • ⛵3. 解法优化 - 带哨兵位
      • 🐋3.1 思路
      • 🐋3.2 代码实现
    • 🚤4. 题目链接

📑1. 题目

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

示例1:
在这里插入图片描述

输入: l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

输入: l1 = [], l2 = []
输出:[]

示例3:

输入: l1 = [], l2 = [0]
输出:[0]

提示:

  • 两个链表的节点数目范围是 [0, 50]
  • -100 <= Node.val <= 100
  • l1 和 l2 均按非递减顺序排列

🛶2. 解法- 头插到新链表

🐬2.1 思路

题目给我们的链表是升序的,最简单直接的思路就是将这两个链表尾插升序排列到一个新链表。

tips:

  1. 这里我们需要考虑到题目给的两个链表是否为空;
  2. 尾插时,也需判断我们的新链表是否为空;
  3. 最后需检查两个链表是否遍历完毕,如果未遍历完毕,则将剩余的元素直接尾插到新链表。

🐬2.1 代码实现

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){if(list1 == NULL)return list2;if(list2 == NULL)return list1;struct ListNode*newhead = NULL,*tail = NULL;while(list1&&list2){if(list1->val <list2->val){if(tail == NULL){newhead = tail =list1;}else{//尾插tail->next = list1;tail = tail->next;}list1 = list1->next;}else{if(tail == NULL){newhead = tail = list2;}else{//尾插tail->next = list2;tail = tail->next;}list2 = list2->next;}}if(list1&&tail){tail->next = list1;tail = tail->next;}if(list2&&tail){tail->next = list2;tail = tail->next;}return newhead;
}

⛵3. 解法优化 - 带哨兵位

🐋3.1 思路

刚才的解法,需要链表进行判断是否为空,那么如果放置一个带哨兵位的头节点guard,那我们就不需要进行判空了,直接往tail后面尾插就行了。

tips:

  1. 这里不能直接返回guard,而是要返回guard的下一个节点,因为guard并未存储任何有效数据,只负责在这里 “站哨”
  2. 因为这里的哨兵位是我们向内存申请的空间,使用完毕之后还需要进行释放。

🐋3.2 代码实现

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){struct ListNode*guard = NULL;struct ListNode*tail = NULL;//哨兵位guard = tail = (struct ListNode*)malloc(sizeof(struct ListNode));tail->next = NULL;while(list1 && list2){if(list1->val < list2->val){tail->next = list1;tail = tail->next;list1 = list1->next;}else{tail->next = list2;tail = tail->next;list2 = list2->next;   }}if(list1)tail->next = list1;if(list2)tail->next = list2;struct ListNode*head = guard->next;free(guard);return head;
}

🚤4. 题目链接

leetcode——21. 合并两个有序链表

相关文章:

leetcode -- 21. 合并两个有序链表

&#x1f428;目录&#x1f4d1;1. 题目&#x1f6f6;2. 解法- 头插到新链表&#x1f42c;2.1 思路&#x1f42c;2.1 代码实现⛵3. 解法优化 - 带哨兵位&#x1f40b;3.1 思路&#x1f40b;3.2 代码实现&#x1f6a4;4. 题目链接&#x1f4d1;1. 题目 将两个升序链表合并为一个…...

计算机组成原理|第四章(笔记)

目录第四章 存储器4.1 概述4.1.1 存储器分类4.1.2 存储器的层次结构4.2 主存储器4.2.1 概述4.2.2 半导体存储芯片简介4.2.3 随机存取存储器&#xff08;RAM&#xff09;4.2.4 只读存储器&#xff08;ROM&#xff09;4.2.5 存储器与CPU的连接4.2.6 存储器的校验4.2.7 提高访存速…...

【Unity3D-BUG记录】Unity3D中出现“动画片段必须标记为Legacy的警告”消除方法

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中可能会遇到下面的警告&#xff1a; The AnimationClip…...

Spring Bean的定义(含创建Bean的三种方式)

&#x1f3c6; 文章目标&#xff1a;复习和理解下Spring Bean的定义 &#x1f340; Spring Bean的定义&#xff08;含创建Bean的三种方式&#xff09; ✅ 创作者&#xff1a;Jay… &#x1f389; 个人主页&#xff1a;Jay的个人主页 &#x1f341; 展望&#xff1a;若本篇讲解内…...

vue的路由-vue router(一)

vue的路由-vue router一、路由的基本使用HTMLrouter-linkrouter-viewJavaScript二、带参数的动态路由匹配三、嵌套路由四. 编程式导航导航到不同的位置替换当前位置横跨历史篡改历史五. 命名路由六. 命名视图嵌套命名视图七. 重定向和别名重定向别名八. 将 props 传递给路由组件…...

DevOps流水线搭建-PHP版本

一、介绍流水线发布代码1、官网https://www.jenkins.io/zh2、kubesphere里的介绍https://kubesphere.io/zh/docs/v3.3/devops-user-guide/how-to-use/pipelines/choose-jenkins-agent/3、git仓库可以自己写点测试代码&#xff0c;提交&#xff0c;待会测试用https://gitee.com/…...

C语言之按位取反~(七十一)

计算机存储数据基本知识计算机中二进制数包括&#xff08;正数和负数&#xff09;是以补码形式存储。符号位&#xff1a;补码的最左侧首位是符号位&#xff0c;0表示正数&#xff0c;1表示负数。二进制有三种形式&#xff1a;原码、反码、补码。正数的补码和反码&#xff1a;是…...

C# 委托

Action 在 C# 中&#xff0c;Action 是一个预定义的委托类型&#xff0c;表示一个不带参数和返回值的方法。它的定义如下&#xff1a; public delegate void Action();Action 委托可以用于表示任何没有参数和返回值的方法。例如&#xff1a; // 定义一个不带参数和返回值的方…...

leetcode究极刷题笔记(11~15)

&#xff08;11&#xff09;盛最多水的容器&#xff08;中等&#xff09; 实现思路&#xff1a; 定义两个指针&#xff08;a,b&#xff09;&#xff0c;分别指向数组的前后位置&#xff0c;如果此时a的值小于b的话&#xff0c;就将a右移一位&#xff0c;如果此时b指向的值小于…...

【C语言】一篇带你从零了解 枚举

文章目录什么是枚举枚举类型的定义枚举的优点枚举的使用什么是枚举 枚举是 C 语言中的一种基本数据类型 可以让数据更简洁&#xff0c;更易读。 枚举顾名思义就是 一 一 列举。 把可能的取值 一 一列举。 比如我们现实生活中&#xff1a; 一周的星期一到星期日是有限的7天&…...

用Pytorch搭建一个房价预测模型

本文参加新星计划人工智能(Pytorch)赛道&#xff1a;https://bbs.csdn.net/topics/613989052 目录 一、项目介绍 二、准备工作 三、实验过程 3.1数据预处理 3.2拆分数据集 3.3构建PyTorch模型 3.3.1.数据转换 3.3.2定义模型架构 3.3.3定义损失准则和优化器 3.3.4创建…...

《Netty》从零开始学netty源码(十五)之ServerSocketChannel

在NioServerSocketChannel中调用newChannel方法创建java原生的channel&#xff0c;过程如下&#xff1a; ServerSocketChannel是一个抽象类&#xff0c;WEPollSelectorProvider调用openServerSocketChannel方法创建的是它的实现类ServerSocketChannelImpl&#xff0c;类结构如下…...

Java stream性能比较

环境 Ubuntu 22.04IntelliJ IDEA 2022.1.3JDK 17CPU&#xff1a;8核 ➜ ~ cat /proc/cpuinfo | egrep -ie physical id|cpu cores physical id : 0 cpu cores : 1 physical id : 2 cpu cores : 1 physical id : 4 cpu cores : 1 physical id : 6 cpu cores : 1 physical id …...

【数据结构与算法】设计循环队列

文章目录&#x1f451;前言如何设计循环队列设计循环队列整体的代码&#x1f4ef;写在最后&#x1f451;前言 &#x1f6a9;前面我们 用队列实现了一个栈 &#xff0c;用栈实现了一个队列 &#xff0c;相信大家随随便便轻松拿捏&#xff0c;而本章将带大家上点难度&#xff0c;…...

最新版!国内IT软件外包公司汇总~

金三银四已经过去一半&#xff0c;再过几个月又将迎来毕业季&#xff0c;大家有没有找到心仪的工作机会呀&#xff1f;有很多同学说今年的金三银四似乎不存在了。小李&#xff1a;今年的金三银四变成了铜三铁四&#xff0c;不断地投递又不断地造拒。小王&#xff1a;大量已读不…...

MySQL的COUNT语句,竟然都能被面试官虐的这么惨!?

关于数据库中行数统计&#xff0c;无论是MySQL还是Oracle&#xff0c;都有一个函数可以使用&#xff0c;那就是COUNT 但是&#xff0c;就是这个常用的COUNT函数&#xff0c;却暗藏着很多玄机&#xff0c;尤其是在面试的时候&#xff0c;一不小心就会被虐。不信的话请尝试回答下…...

数位DP 详解及其案例实战 [模板+技巧+案例]

零. 案例引入 1.案例引入 leetcode233. 数字 1 的个数 给定一个整数 n&#xff0c;计算所有小于等于 n 的非负整数中数字 1 出现的个数。 输入&#xff1a;n 13 输出&#xff1a;6 2.暴力解 对于上述的案例&#xff0c;暴力解肯定是可行的&#xff0c;但时间复杂度较高,对…...

并发编程(六)—AbstractExecutorService源码分析

一、AbstractExecutorService简介AbstractExecutorService是一个抽象类&#xff0c;实现了ExecutorService接口&#xff0c;提供了线程池的基本实现。它是Java Executor框架的核心类&#xff0c;提供了线程池的基本操作&#xff0c;如提交任务、管理线程池、执行任务等。自定义…...

015行为型-职责链模式

目录定义标准模式实现&#xff1a;职责链变体使用链表实现使用数组实现应用场景日志输出spring过滤器spirng 拦截器mybatis动态sql定义 责链模式是一种设计模式&#xff0c;其目的是使多个对象能够处理同一请求&#xff0c;但是并不知道下一个处理请求的对象是谁。它能够解耦请…...

python例程:五子棋(控制台版)程序

目录《五子棋&#xff08;控制台版&#xff09;》程序使用说明程序示例代码可执行程序及源码下载路径《五子棋&#xff08;控制台版&#xff09;》程序使用说明 在PyCharm中运行《五子棋&#xff08;控制台版&#xff09;》即可进入如图1所示的系统主界面。 图1 游戏主界面 具…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

倒装芯片凸点成型工艺

UBM&#xff08;Under Bump Metallization&#xff09;与Bump&#xff08;焊球&#xff09;形成工艺流程。我们可以将整张流程图分为三大阶段来理解&#xff1a; &#x1f527; 一、UBM&#xff08;Under Bump Metallization&#xff09;工艺流程&#xff08;黄色区域&#xff…...