算法:合并两个有序链表

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

[[414979]]

本文转载自微信公众号「三分钟学前端」,作者sisterAn。转载本文请联系三分钟学前端公众号。

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

示例:

  1. 输入:1->2->4, 1->3->4 
  2. 输出:1->1->2->3->4->4 

解答:

确定解题的数据结构: 单链表

确定解题思路: 从链表头开始比较,l1 与 l2 是有序递增的,所以比较 l1.val 与 l2.val 的较小值就是合并后链表的最小值,次小值就是小节点的 next.val 与大节点的 val 比较的较小值,依次递归,直到递归到 l1 l2 均为 null

画图实现: 画图帮助理解一下

确定边界条件: 当递归到任意链表为 null ,直接将 next 指向另外的链表即可,不需要继续递归了

代码实现:

  1. function mergeTwoLists(l1, l2) { 
  2.     if(l1 === null) { 
  3.         return l2 
  4.     } 
  5.     if(l2 === null) { 
  6.         return l1 
  7.     } 
  8.     if(l1.val <= l2.val) { 
  9.         l1.next = mergeTwoLists(l1.next, l2) 
  10.         return l1 
  11.     } else { 
  12.         l2.next = mergeTwoLists(l2.next, l1) 
  13.         return l2 
  14.     } 

 

来源:https://github.com/sisterAn/JavaScript-Algorithms

 

责任编辑:武晓燕 来源: 三分钟学前端
相关推荐

2021-01-28 08:20:41

链表空间复杂度

2022-06-27 07:50:16

链表节点测试

2020-10-25 08:47:36

Python有序字典

2021-11-17 08:43:17

LeetCode有序数组算法

2021-05-07 08:03:05

JS动态合并

2021-09-08 09:52:34

语言

2022-06-17 09:46:51

Chrome 102Chrome浏览器

2020-10-26 08:19:53

算法队列

2023-10-07 08:11:22

代码模板合并排序

2020-11-13 07:16:09

线程互斥锁死循环

2022-02-16 09:12:22

LeetCode升序链表链表数组

2010-09-10 15:26:05

SOAP封装

2009-07-16 10:39:00

SwingUtilit

2017-01-15 01:45:37

简历简历模板数据

2009-07-15 18:29:22

Jython应用

2019-06-25 10:46:04

Flutter开发APP

2022-10-17 16:17:24

机器学习算法标签传播

2010-09-17 09:51:37

SIP路由

2010-07-02 12:26:51

LEACH协议

2013-05-30 22:47:40

阿里巴巴阿里云昆塔盒子总动员
点赞
收藏

51CTO技术栈公众号