LeetCode刷题---合并两个有序链表

个人主页:元清加油_【C++】,【C语言】,【数据结构与算法】-CSDN博客

个人专栏:http://t.csdnimg.cn/ZxuNL

                 http://t.csdnimg.cn/c9twt


前言:这个专栏主要讲述递归递归、搜索与回溯算法,所以下面题目主要也是这些算法做的  

我讲述题目会把讲解部分分为3个部分:
1、题目解析

2、算法原理思路讲解

3、代码实现


一、合并两个有序链表 

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目:

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

示例 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 均按 非递减顺序 排列

二、解法 

题目解析

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

说明我们不能直接去新建一个链表,我们只能直接改变旧链表的指向来合并成一个新的链表 



算法原理思路讲解 

注意:我们在做递归这一类题目是要将递归看作一个黑盒,我们不管他是如何实现的,我们就相信他一定可以帮助我们完成目标

如何去写一个递归

1、先找到相同的子问题                                   函数头的设计

2、只关心某一个子问题是如何解决的             函数体的书写

3、注意一下递归函数的出口                            终止条件   

我们可以设计一个函数头:
交给你两个链表的头结点,你帮我把它们合并起来,并且返回合并后的头结点。
ListNode* dfs(ListNode* l1, ListNode* l2)

函数体:
选择两个头结点中较⼩的结点作为最终合并后的头结点,然后将剩下的链表交给递归函数去处理。
1、比较两个链表的头结点值的大小(如果l1小
2、l1->next = dfs(l1->next,l2);
3、返回合并后的头结点,也就是l1
if (l1->val <= l2->val)
{l1->next = dfs(l1->next,l2);return l1;
}

若是l2小亦然

递归出⼝:
当某⼀个链表为空的时候,返回另外⼀个链表。
以上思路就讲解完了,大家可以先自己先做一下
大家注意:链表的题⼀定要画图,搞清楚指针的操作!

代码实现:

class Solution 
{
public:ListNode* dfs(ListNode* l1, ListNode* l2){if ( l1 == nullptr) return l2;if ( l2 == nullptr) return l1;if (l1->val <= l2->val){l1->next = dfs(l1->next,l2);return l1;}else{l2->next = dfs(l1,l2->next);return l2;}}ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {return dfs(list1,list2);}
};

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

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

相关文章

基于深度学习的肺炎CT图像检测诊断系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习在肺炎CT图像检测诊断方面具有广泛的应用前景。以下是关于肺炎CT图像检测诊断系统的介绍&#xff1a; 任务…

基于PHP的高中生物学习平台

有需要请加文章底部Q哦 可远程调试 基于PHP的高中生物学习平台 一 介绍 此高中生物学习平台基于原生PHP开发&#xff0c;数据库mysql。系统角色分为用户和管理员。(附带参考设计文档) 技术栈&#xff1a;phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/注销 2 个人中心 …

C语言KR圣经笔记 4.2返回非整数的函数

4.2 返回非整数的函数 到目前为止&#xff0c;我们给出的函数样例&#xff0c;不是不返回值&#xff08;void&#xff09;就是返回 int。如果函数必须要返回其他类型呢&#xff1f;许多的数值函数如 sqrt&#xff0c;sin 和 cos 返回 double&#xff1b;其他特定的函数返回其他…

【个人记录】NGINX反向代理支持同端口HTTP与HTTPS协议访问

监听4000端口&#xff0c;反向代理127.0.0.1:9090的Web网页 NGINX配置如下 server {listen 4000 ssl http2 ; server_name www.http.com,www.https.com; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forw…

Vue3【Set Up】语法糖 + TS快速上手

文章目录 script setup基本语法顶层的绑定会被暴露给模板响应式监听与计算使用组件父子组件传参&#xff08;变化较大&#xff09;父 -> 子 defineProps()子 -> 父 defineEmits()子组件暴露给父组件内部属性 defineExpose() defineOptions() 【很少用】 script setup &l…

人工智能时代:AIGC的横空出世

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 什么是AIGC?二. AIGC的主要特征2.1 文本生成2.2 图像生成2.3 语音生成2.4 视…

蓝桥杯第198题 人物相关性分析 C++ 模拟 字符串 双指针

题目 思路和解题方法 程序首先定义了一个函数check&#xff0c;用于判断一个字符是否为字母。接下来&#xff0c;程序读取输入的整数k和一行字符串str。定义了两个空的向量a和b&#xff0c;用于存储满足条件的子串的起始位置。使用for循环遍历字符串str的每个字符&#xff0c;检…

string的模拟

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能手撕模拟string类 > 毒鸡汤&#xff1a;时间…

MySQL-视图

一、&#xff1f;看一个需求 emp表的列信息很多&#xff0c;有些信息是个人重要信息(比如 sal,comm,mgr,hiredate),如果我们希望某个用户只能查询emp表的(empno、ename,job和deptno)信息,有什么办法? 》视图 二、基本概念 视图 视图是一个虚拟表&#xff0c;其内容由查…

complex rsa

复数rsa&#xff0c;没遇到过这种类型的题&#xff0c;可以记录一下相关知识 先来看一段 from gmpy2 import invert,lcm,is_prime import sys sys.setrecursionlimit(2047)f (3781223486422146909054116838073773962793625267340680342971864932558735632642532480951976591…

IDEA常用快捷键

快捷键功能tab接受选择–选择的名称将覆盖带插入符号右侧的其它名称–而如果按shift或者enter&#xff0c;光标右边的内容会保留Ctrlshift空格智能匹配–查找当前上下文的方法和变量Ctrld对比文件–选中需要对比的文件shift滚动水平滚动Ctrlaltl格式化Ctrlk提交Ctrlaltz回滚类C…

Linux基础项目开发1:量产工具——UI系统(五)

前言&#xff1a; 前面我们已经把显示系统、输入系统、文字系统搭建好了&#xff0c;现在我们就要给它实现按钮操作了&#xff0c;也就是搭建UI系统&#xff0c;下面让我们一起实现UI系统的搭建吧 目录 一、按钮数据结构抽象 ui.h 二、按键编程 1.button.c 2.disp_manager…

YUM 问题解决步骤

YUM 问题解决步骤 当使用 yum 进行安装软件包或者更新时&#xff0c;如果遇到卡在加载插件阶段或其他相关问题&#xff0c;如下 [rootVM-12-2-centos ~]# sudo yum update Loaded plugins: fastestmirror, langpacks Repository epel is listed more than once in the config…

linux shell编程

Linux shell编程 一、常用功能1. 比较图片差异2. 截屏2.1 起X情况下&#xff08;X window起桌面&#xff09;2.2 没有起X或没有X系统环境下 3. 自动输入密码 一、常用功能 1. 比较图片差异 if compare -metric AE p1.png p2.png null: 2>&1 | grep -v "0$";…

查找算法及哈希表

1 二分查找 1.1 重要概念 拟解决的问题&#xff1a;判断某个区间是否包含某个元素&#xff0c;无法确定区间中包含重复元素的具体位置&#xff1b;使用条件&#xff1a;查找的区间必须符合单调性&#xff1b;本质&#xff1a;采用分治思想&#xff0c;将某个单调区间一分为二…

12.2_黑马Redis实战篇附近商铺用户签到UV统计

实战篇11 实战篇12 要先用test的方式把商铺的数据导入到idea当中&#xff0c;才可以进行查询噢。 代码&#xff1a; 实战篇13 thinking&#xff1a;插件mavenhelper&#xff1f; 方便处理pom文件。 实战篇15 实战篇16 thinking&#xff1a;XX.format(DateTimeFormatter.ofP…

【网络安全技术】实体认证技术Kerberos

一、什么是Kerberos Kerberos解决的是客户端与服务器通信场景中&#xff0c;确保客户端服务器双方的身份可信&#xff0c;并提供对称密钥的分发来加密传输。是一个应用层的协议。 二、一个简单的模型 1.看这个基础的模型&#xff0c;客户端要和服务器通信&#xff0c;他先将自…

《堆》的模拟实现

目录 前言&#xff1a; 模拟实现《堆》&#xff1a; 1.自定义数据类型 2.初始化“堆” 3.销毁“堆” 4.进“堆” 关于AdjustUp() 5.删除堆顶元素 关于AdjustDown() 6.判断“堆”是否为空 7.求“堆”中的数据个数 8.求“堆”顶元素 总结&#xff1a; 前言&#xf…

「LeetCode Hot 100 题」详解

前言 前言&#xff1a;LeetCode Hot 100 题详解 文章目录 前言1. 两数之和2. 字母异位词分组3. 最长连续序列4. 移动零 1. 两数之和 原题链接&#xff1a;两数之和 知识点&#xff1a;哈希表 题解 class Solution {public int[] twoSum(int[] nums, int target) {Map<Inte…

mysql原理--重新认识MySQL

1.MySQL请求处理 1.1.查询缓存 MySQL 服务器程序处理查询请求时&#xff0c;会把刚刚处理过的查询请求和结果缓存起来&#xff0c;如果下一次有一模一样的请求过来&#xff0c;直接从缓存中查找结果就好了&#xff0c;就不用再傻呵呵的去底层的表中查找了。这个查询缓存可以在不…