题目描述:

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

示例:

输入: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题: 合并两个有序链表相关推荐

  1. 《LeetCode力扣练习》第21题 合并两个有序链表 Java

    <LeetCode力扣练习>第21题 合并两个有序链表 Java 一.资源 题目: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例 ...

  2. 【LeetCode】21、合并两个有序链表

    21.合并两个有序链表 题目: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例1: 输入:l1 = [1,2,4], l2 = [1,3,4] ...

  3. LeetCode题组:第21题-合并两个有序链表

    1.题目:合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出: ...

  4. LeetCode(21)——合并两个有序链表(JavaScript)

    将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1->2- ...

  5. [剑指offer]面试题第[25]题[Leedcode][JAVA][第21题][合并两个有序链表]

    [问题描述][简单] 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例:输入:1->2->4, 1->3->4 输出:1-&g ...

  6. 两个有序链表序列的交集_腾讯50题---合并两个有序链表(简单)

    5.1 题目描述: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1-&g ...

  7. Leetcode每日一题:21.merge-two-sorted-lists(合并两个有序链表)

    常规方法:采用归并排序的归并方法即可 struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {} } ...

  8. leetcode算法题--合并两个有序链表

    原题链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/ ListNode* mergeTwoLists(ListNode* l1, ...

  9. LeetCode 21. 合并两个有序链表(链表)

    上一篇博客:LeetCode 20. 有效的括号(栈.字符串)  写在前面:大家好!我是ACfun,我的昵称来自两个单词Accepted和fun.我是一个热爱ACM的蒟蒻.最近萌生了刷LeetCode ...

  10. LeetCode 21合并两个有序链表22括号生成

    微信搜索bigsai,回复进群,加入打卡.维护不易,欢迎点赞支持! 合并两个有序列表 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1 ...

最新文章

  1. git remote 命令
  2. [LeetCode] Add Digits
  3. “掘金”金融AI落地,英特尔趟出一套通关攻略
  4. 剑指Offer_Python实现
  5. 如何在node.js中发出HTTP POST请求?
  6. js 定时网页点击_JS的小乐趣:轻松完成打地鼠游戏
  7. solidworks热分析_solidworks解决管道流体问题,原来可以如此轻松
  8. java中什么是同步_Java中,“synchronized”(同步)是什么意思?什么时候应该用synchronized? - Break易站...
  9. SDK 操作 list-view control 实例 -- 遍历进程
  10. Openlayer 3 的画图测量面积
  11. 前端必会!四步带你吃透浏览器渲染基本原理
  12. 失败产品手册:一款影音娱乐平台的败局
  13. 『杭电1897』SnowWolf‘s Wine Shop
  14. 数值计算(九)——线性代数方程组求解(一)高斯消元法
  15. 谷歌(Google): reCaptcha(2.0版本)做网站验证码
  16. 统计软件是其他计算机软件吗,电脑统计软件,statistical computing software,音标,读音,翻译,英文例句,英语词典...
  17. strstr和strcasestr
  18. 我学习编程的好的学习方法!
  19. asp毕业设计——基于vb+VB.NET+SQL Server的图书馆管理信息系统设计与实现(毕业论文+程序源码)——图书馆管理信息系统
  20. 对微机用户来说 为了防止计算机意外故障,对于微机用户来说,为了防止计算机意外故障而丢失重要数据,对重要数据应定期进行备份。下列移动存储器中,最不常用的一种是...

热门文章

  1. CentOS7.2下配置SOCKS5代理
  2. 支付宝及时到账(新版)配置
  3. Linux 用户态与内核态的交互——netlink 篇
  4. oracle产生随机日期,Oracle生成随机日期时间
  5. html代码高亮带行号,kindeditor代码高亮自动行号功能
  6. C语言课后习题(64)
  7. PAT乙级(1022 D进制的A+B )
  8. 数据库-MySQL-数据库设计-外键
  9. 报告解读下载 | 数据库的未来和“十四五”数据库发展趋势与挑战
  10. TRUNCATE TABLE恢复-脚本