【算法】合并两个有序链表
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
};
【算法】合并两个有序链表相关推荐
- [PHP] 算法-合并两个有序链表为一个有序链表的PHP实现
合并两个有序的链表为一个有序的链表: 类似归并排序中合并两个数组的部分 1.遍历链表1和链表2,比较链表1和2中的元素大小 2.如果链表1结点大于链表2的结点,该结点放入第三方链表 3.链表1往下走一 ...
- 算法----合并两个有序链表
题目: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] ...
- 算法--合并两个有序链表
有两种方法,迭代和递归. 迭代: //不带头结点 Node * Merge(Node *head1 , Node *head2){//判空if ( head1 == NULL)return head2 ...
- 【每日一算法】 合并两个有序链表
微信改版,加星标不迷路! 每日一算法-合并两个有序链表 作者:阿广 阅读目录 1 题目 2 解析 1 题目 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. ...
- java合并两个有序链表_JS实现的合并两个有序链表算法示例
本文实例讲述了JS实现的合并两个有序链表算法.分享给大家供大家参考,具体如下: 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1-> ...
- 经典算法——合并两个有序单向链表
1.题目要求 这是一道求职面试时经常要求手写或者机试的经典题目. 已知两个链表 head1 和 head2 各自有序,请把它们合并成一个链表依然有序.结果链表要包含 head1 和head2 的所有节 ...
- 算法:合并两个有序链表
题目 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1- ...
- fastreport 打印两个list_Smaller And Smarter Python数据结构:合并两个有序链表
原创: 老表 简说Python 今日问题 :翻转链表k个相邻结点 """目标:写一段程序,合并两个有序链表例如:输入-> 1->2->3输入-> ...
- python合并两个有序列表_Python实现合并两个有序链表的方法示例
本文实例讲述了Python实现合并两个有序链表的方法.分享给大家供大家参考,具体如下: 思路:先选出第一个节点,然后遍历两个链表,把小的作为当前节点的下一个节点,一直到其中一个链表遍历完,这时候把另一 ...
- leetcode 21 java_LeetCode 21. 合并两个有序链表
LeetCode 21. 合并两个有序链表 题目 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1-> ...
最新文章
- python线程实现人脸识别_OpenCV/Python:用于实时人脸识别的多线程技术
- python读取excel文件-Python 读写excel文件
- Oracle 多行记录合并/连接/聚合字符串的几种方法
- scrapy item引用时报错
- CXF+JAXB处理复杂数据
- 响应式关系数据库处理R2DBC
- 前端学习(799):根据位置返回字符
- Oracle进阶学习之创建数据库
- 3分钟看懂 Linux 磁盘划分
- 解决Mac下Parallels Desktop的Host-only网络问题
- 打印机质量测试软件,打印质量测试
- Thinkphp仿众图网图片素材下载站源码+自适应手机端
- 一些西安附近的旅游信息
- libdbus 实例以及使用d-feet查看接口方法
- 常见机器视觉软件OpenCV/Halcon/VisionPro/MIL的区别
- 字符串前加 u、r、f 的含义
- 微信h5小游戏作品欣赏:详解微信h5如何制作
- PHP:抓取网页指定内容
- 部署DNS从服务失败,nslookup访问www.linuxprobe.com失败
- 常用模型、分析方法及其检验标准累积汇总
热门文章
- java用switch语句抽奖_Java使用带有switch语句的枚举
- Matlab中xtickformat函数
- NIFI 自定义 processor 实现
- 利用SEQ2SEQ模型实现车牌识别
- 2020保研夏令营之路——武大网安、北理计算机、中科院信工所六室
- java操作cad_java调用AutoCAD绘图
- Ubuntu 19.04 磁盘加密
- SSN3SL16A 华为SDH全新原包装STM-16光接口板
- webpack打包报错 [webpack-cli] TypeError: merge is not a function
- 高分三号卫星以及数据产品简介