21. 合并两个有序链表

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

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

来源:力扣(LeetCode)

解题思路一

1.比较l1和l2两个链表的头结点,哪个更小它的next指针就指向其余节点的合并结果(调用递归)
2.递归结束条件当有一个链表为空,即表示已经合并完成




/*** Definition for singly-linked list.* function ListNode(val, next) {*     this.val = (val===undefined ? 0 : val)*     this.next = (next===undefined ? null : next)* }*/
/*** @param {ListNode} list1* @param {ListNode} list2* @return {ListNode}*/
var mergeTwoLists = function(list1, list2) {if(list1 === null) { // 当l1为空时,返回l2return list2} else if(list2 === null) { // 当l2为空时,返回l1return list1} else if(list1.val < list2.val) { // l1 节点 < l2 节点时list1.next = mergeTwoLists(list1.next, list2 ) // l1的next为 l1剩下的节点+l2(即继续比较l1.next和l2的值,比较后会产生一个更小的节点x,添加到当前l1的后面)return list1  // 返回l1} else {// l2逻辑同上list2.next = mergeTwoLists(list2.next, list1)return list2}
};

解题思路二

1.我们将结果放在一个新链表中,所以先创建一个虚拟节点
2.l1和l2的头节点,哪个更小虚拟节点的指针就指向谁
3.需要不断移动l1或者l2的指针新链表的指针
4.最后哪个链表不为空就直接拼接到新链表之后



/*** Definition for singly-linked list.* function ListNode(val, next) {*     this.val = (val===undefined ? 0 : val)*     this.next = (next===undefined ? null : next)* }*/
/*** @param {ListNode} list1* @param {ListNode} list2* @return {ListNode}*/
var mergeTwoLists = function(l1, l2) {const node = new ListNode(-1) // 创建虚拟节点let p = nodewhile (l1 !== null && l2 !== null) {if(l1.val <= l2.val) {p.next = l1 // 新链表指针指向l1l1 = l1.next // 断开后边节点与当前节点,指针后移} else {p.next = l2 // 新链表指针指向l2l2 = l2.next // 断开后边节点与当前节点,指针后移}p = p.next // 一定要移动新链表指针}p.next = l1 === null ? l2 : l1 // 最后把不为空的节点链表直接拼在新链表后边return node.next
};

【算法】合并两个有序链表相关推荐

  1. [PHP] 算法-合并两个有序链表为一个有序链表的PHP实现

    合并两个有序的链表为一个有序的链表: 类似归并排序中合并两个数组的部分 1.遍历链表1和链表2,比较链表1和2中的元素大小 2.如果链表1结点大于链表2的结点,该结点放入第三方链表 3.链表1往下走一 ...

  2. 算法----合并两个有序链表

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

  3. 算法--合并两个有序链表

    有两种方法,迭代和递归. 迭代: //不带头结点 Node * Merge(Node *head1 , Node *head2){//判空if ( head1 == NULL)return head2 ...

  4. 【每日一算法】 合并两个有序链表

    微信改版,加星标不迷路! 每日一算法-合并两个有序链表 作者:阿广 阅读目录 1 题目 2 解析 1 题目 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. ...

  5. java合并两个有序链表_JS实现的合并两个有序链表算法示例

    本文实例讲述了JS实现的合并两个有序链表算法.分享给大家供大家参考,具体如下: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1-> ...

  6. 经典算法——合并两个有序单向链表

    1.题目要求 这是一道求职面试时经常要求手写或者机试的经典题目. 已知两个链表 head1 和 head2 各自有序,请把它们合并成一个链表依然有序.结果链表要包含 head1 和head2 的所有节 ...

  7. 算法:合并两个有序链表

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

  8. fastreport 打印两个list_Smaller And Smarter Python数据结构:合并两个有序链表

    原创: 老表 简说Python 今日问题 :翻转链表k个相邻结点 """目标:写一段程序,合并两个有序链表例如:输入-> 1->2->3输入-> ...

  9. python合并两个有序列表_Python实现合并两个有序链表的方法示例

    本文实例讲述了Python实现合并两个有序链表的方法.分享给大家供大家参考,具体如下: 思路:先选出第一个节点,然后遍历两个链表,把小的作为当前节点的下一个节点,一直到其中一个链表遍历完,这时候把另一 ...

  10. leetcode 21 java_LeetCode 21. 合并两个有序链表

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

最新文章

  1. python线程实现人脸识别_OpenCV/Python:用于实时人脸识别的多线程技术
  2. python读取excel文件-Python 读写excel文件
  3. Oracle 多行记录合并/连接/聚合字符串的几种方法
  4. scrapy item引用时报错
  5. CXF+JAXB处理复杂数据
  6. 响应式关系数据库处理R2DBC
  7. 前端学习(799):根据位置返回字符
  8. Oracle进阶学习之创建数据库
  9. 3分钟看懂 Linux 磁盘划分
  10. 解决Mac下Parallels Desktop的Host-only网络问题
  11. 打印机质量测试软件,打印质量测试
  12. Thinkphp仿众图网图片素材下载站源码+自适应手机端
  13. 一些西安附近的旅游信息
  14. libdbus 实例以及使用d-feet查看接口方法
  15. 常见机器视觉软件OpenCV/Halcon/VisionPro/MIL的区别
  16. 字符串前加 u、r、f 的含义
  17. 微信h5小游戏作品欣赏:详解微信h5如何制作
  18. PHP:抓取网页指定内容
  19. 部署DNS从服务失败,nslookup访问www.linuxprobe.com失败
  20. 常用模型、分析方法及其检验标准累积汇总

热门文章

  1. java用switch语句抽奖_Java使用带有switch语句的枚举
  2. Matlab中xtickformat函数
  3. NIFI 自定义 processor 实现
  4. 利用SEQ2SEQ模型实现车牌识别
  5. 2020保研夏令营之路——武大网安、北理计算机、中科院信工所六室
  6. java操作cad_java调用AutoCAD绘图
  7. Ubuntu 19.04 磁盘加密
  8. SSN3SL16A 华为SDH全新原包装STM-16光接口板
  9. webpack打包报错 [webpack-cli] TypeError: merge is not a function
  10. 高分三号卫星以及数据产品简介