leetcode第21题: 合并两个有序链表
题目描述:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
思路解析:
递归法:
- 递归函数必须要有终止条件,否则会出错;
- 递归函数先不断调用自身,直到遇到终止条件后进行回溯,最终返回答案。
根据以上规律考虑本题目:
终止条件:当两个链表都为空时,表示我们对链表已合并完成。
如何递归:我们判断 l1 和 l2 头结点哪个更小,然后较小结点的 next 指针指向其余结点的合并结果。(调用递归)
class Solution{public ListNode mergeTwoLists(ListNode l1, ListNode l2) {if(l1==null){return l2;}else if(l2==null){return l1;}else if(l1.val<l2.val){l1.next=mergeTwoLists(l1.next,l2);return l1;}else{l2.next=mergeTwoLists(l1,l2.next);return l2;}}
}
迭代法
首先,我们设定一个哨兵节点 head ,这可以在最后让我们比较容易地返回合并后的链表。我们维护一个 pre 指针,我们需要做的是调整它的 next 指针。然后,我们重复以下过程,直到 l1 或者 l2 指向了 null :如果 l1 当前节点的值小于等于 l2 ,我们就把 l1 当前的节点接在 prev节点的后面同时将 l1 指针往后移一位。否则,我们对 l2 做同样的操作。不管我们将哪一个元素接在了后面,我们都需要把 prev 向后移一位。
在循环终止的时候, l1 和 l2 至多有一个是非空的。由于输入的两个链表都是有序的,所以不管哪个链表是非空的,它包含的所有元素都比前面已经合并链表中的所有元素都要大。这意味着我们只需要简单地将非空链表接在合并链表的后面,并返回合并链表即可。
class Solution{public ListNode mergeTwoLists(ListNode l1,ListNode l2){ListNode head=new ListNode(-1);Listnode pre=head;while(l1!=null &&l2!=null){if(l1.val<=l2.val){pre.next=l1;l1=l1.nextx;}else{pre.next=l2;l2=l2.next;}pre=pre.next;}
// 合并后 l1 和 l2 最多只有一个还未被合并完,我们直接将链表末尾指向未合并完的链表即可pre.next=l1==null?l2:l1;return head.next;}}
leetcode第21题: 合并两个有序链表相关推荐
- 《LeetCode力扣练习》第21题 合并两个有序链表 Java
<LeetCode力扣练习>第21题 合并两个有序链表 Java 一.资源 题目: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例 ...
- 【LeetCode】21、合并两个有序链表
21.合并两个有序链表 题目: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例1: 输入:l1 = [1,2,4], l2 = [1,3,4] ...
- LeetCode题组:第21题-合并两个有序链表
1.题目:合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出: ...
- LeetCode(21)——合并两个有序链表(JavaScript)
将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1->2- ...
- [剑指offer]面试题第[25]题[Leedcode][JAVA][第21题][合并两个有序链表]
[问题描述][简单] 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例:输入:1->2->4, 1->3->4 输出:1-&g ...
- 两个有序链表序列的交集_腾讯50题---合并两个有序链表(简单)
5.1 题目描述: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1-&g ...
- Leetcode每日一题:21.merge-two-sorted-lists(合并两个有序链表)
常规方法:采用归并排序的归并方法即可 struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {} } ...
- leetcode算法题--合并两个有序链表
原题链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/ ListNode* mergeTwoLists(ListNode* l1, ...
- LeetCode 21. 合并两个有序链表(链表)
上一篇博客:LeetCode 20. 有效的括号(栈.字符串) 写在前面:大家好!我是ACfun,我的昵称来自两个单词Accepted和fun.我是一个热爱ACM的蒟蒻.最近萌生了刷LeetCode ...
- LeetCode 21合并两个有序链表22括号生成
微信搜索bigsai,回复进群,加入打卡.维护不易,欢迎点赞支持! 合并两个有序列表 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1 ...
最新文章
- git remote 命令
- [LeetCode] Add Digits
- “掘金”金融AI落地,英特尔趟出一套通关攻略
- 剑指Offer_Python实现
- 如何在node.js中发出HTTP POST请求?
- js 定时网页点击_JS的小乐趣:轻松完成打地鼠游戏
- solidworks热分析_solidworks解决管道流体问题,原来可以如此轻松
- java中什么是同步_Java中,“synchronized”(同步)是什么意思?什么时候应该用synchronized? - Break易站...
- SDK 操作 list-view control 实例 -- 遍历进程
- Openlayer 3 的画图测量面积
- 前端必会!四步带你吃透浏览器渲染基本原理
- 失败产品手册:一款影音娱乐平台的败局
- 『杭电1897』SnowWolf‘s Wine Shop
- 数值计算(九)——线性代数方程组求解(一)高斯消元法
- 谷歌(Google): reCaptcha(2.0版本)做网站验证码
- 统计软件是其他计算机软件吗,电脑统计软件,statistical computing software,音标,读音,翻译,英文例句,英语词典...
- strstr和strcasestr
- 我学习编程的好的学习方法!
- asp毕业设计——基于vb+VB.NET+SQL Server的图书馆管理信息系统设计与实现(毕业论文+程序源码)——图书馆管理信息系统
- 对微机用户来说 为了防止计算机意外故障,对于微机用户来说,为了防止计算机意外故障而丢失重要数据,对重要数据应定期进行备份。下列移动存储器中,最不常用的一种是...