合并两个排序的链表
2022/8/15 23:26:37
本文主要是介绍合并两个排序的链表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 题目描述
- 解题思路
- 解题代码
题目描述
题目地址:http://mtw.so/6r71s0
题目要求:输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。
数据范围: 0 ≤n≤1000,−1000≤节点值≤1000
要求:空间复杂度 O(1),时间复杂度O(n)
解题思路
-
创建新的空链表,来存放链表合并后的结果
-
创建哑(虚拟)节点
在链表的操作中,添加一个哑节点(dummy node),让它的指针指向链表的头节 点,这样在删除节点的时候,就不需要再判断删除的是否是头结点了。- 好处:
- 省略头节点为空时的情况的判断;
- 头节点和其他节点进行同样的操作时,由于头节点没有前一个节点,需要对这种 情况进行单独判断,但加入虚拟节点以后,头节点就可以当作普通节点看待。
- 好处:
-
先两个链表的头结点进行对比,确定新链表的头结点
-
比较完,如果有链表有剩余节点,直接存放( 因为是递增链表,没有比较完的所有节点一定都比新链表大)
解题代码
function ListNode(x){ this.val = x; this.next = null; } function Merge(pHead1, pHead2) { // write code here let current = new ListNode(); let dummy = current; while(pHead1 !== null && pHead2 !== null){ if(pHead1.val < pHead2.val){ current.next = pHead1; //将小的节点存入新链表 pHead1 = pHead1.next; }else{ current.next = pHead2; pHead2 = pHead2.next; } current = current.next; //存放完节点,移动新链表指针 } if(pHead1 !== null){ current.next = pHead1; } if(pHead2 !== null){ current.next = pHead2; } //dummy在新链表之前,dummy.next才是完整链表 return dummy.next; } module.exports = { Merge : Merge };
这篇关于合并两个排序的链表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南