算法2(蓝桥杯19)-合并两个有序链表

ops/2024/12/14 9:52:41/

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

解题思路:

创建一个虚拟节点,循环比较l1、l2链表各节点的大小,将较小的节点追加到虚拟节点后,返回新链表

1、定义链表节点结构,写入测试数据

2、创建一个虚拟节点(哑结点),让当前节点指向虚拟节点

哑结点(dummy node)是一种在链表操作中常用的技巧,它代表一个临时的、不存储有效数据的节点。哑结点通常用作链表的头部或某个操作的起始点,从而简化边界条件的处理。

3、遍历l1、l2链表,比较l1、l2中各个节点的大小(循环条件是两个链表均不为空),将较小的节点,添加到新链表(虚拟节点之后)

4、遍历完后(即有l1或l2的长度为空),将剩余链表(剩余的有序节点)接入后面即可

5、返回新链表

        

6、完整代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>合并两个有序链表</title>
</head>
<body><p><h4>挑战内容</h4>    将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。</p><p>输入:l1 = 1 -> 2 -> 4 -> null, l2 = 1 -> 3 -> 4 -> null输出:1 -> 1 -> 2 -> 3 -> 4 -> 4 -> null</p>
</body>
<script>// 定义链表节点结构function ListNode(val,next=null){this.val=valthis.next=next}// 测试数据let l1=new ListNode(1,new ListNode(2,new ListNode(4)))let l2 = new ListNode(1, new ListNode(3, new ListNode(4)))mergeTwoLists(l1,l2)function mergeTwoLists(l1, l2) {// 查看测试数据是否正确// console.log(l1,l2);// 创建一个虚拟节点let node = new ListNode(0)// 当前节点let cur = node// 遍历l1、l2while (l1 !== null && l2 !== null) {// l1某个节点上的值<=l2某个节点上的值时if(l1.val <= l2.val){cur.next= l1l1 = l1.next}else{cur.next=l2l2=l2.next}// 当有节点在下一位时(新增了l1/l2节点),当前节点的指针指向下一个节点cur=cur.next}// 遍历完后(即有l1/l2的长度为空),将剩余链表(剩余的有序节点)接入后面即可if (l1 !== null) {cur.next=l1}if (l2 !== null) {cur.next = l1}// console.log(node.next);// 返回新链表return node.next}</script>
</html>

注:在提交时需要将定义的链表结构一同提交,即如下:

  // 定义链表节点结构function ListNode(val,next=null){this.val=valthis.next=next
}
function mergeTwoLists (l1, l2) {// 创建一个虚拟节点let node = new ListNode(0)// 当前节点let cur = node// 遍历l1、l2while (l1 !== null && l2 !== null) {// l1某个节点上的值<=l2某个节点上的值时if(l1.val <= l2.val){cur.next= l1l1 = l1.next}else{cur.next=l2l2=l2.next}// 当有节点在下一位时(新增了l1/l2节点),当前节点的指针指向下一个节点cur=cur.next}// 遍历完后(即有l1/l2的长度为空),将剩余链表(剩余的有序节点)接入后面即可if (l1 !== null) {cur.next=l1}if (l2 !== null) {cur.next = l2}// console.log(node.next);// 返回新链表return node.next
}module.exports = mergeTwoLists


http://www.ppmy.cn/ops/141782.html

相关文章

quartz 架构详解

‌Quartz是一个开源的作业调度框架&#xff0c;完全由Java编写&#xff0c;主要用于定时任务的调度和管理。Quartz的架构主要包括以下几个核心组件‌&#xff1a; 1.‌调度器&#xff08;Scheduler&#xff09;‌&#xff1a;调度器是Quartz的核心组件&#xff0c;负责管理Qua…

MySQL有哪些高可用方案?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL有哪些高可用方案?】面试题。希望对大家有帮助&#xff1b; MySQL有哪些高可用方案? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 高可用方案旨在确保数据库系统的高可靠性、低宕机时间、以及在硬件故障…

人工智能大语言模型起源篇(二),从通用语言微调到驾驭LLM

上一篇&#xff1a;《人工智能大语言模型起源篇&#xff08;一&#xff09;&#xff0c;从哪里开始》 &#xff08;5&#xff09;Howard 和 Ruder 于2018年发表的《Universal Language Model Fine-tuning for Text Classification》&#xff0c;https://arxiv.org/abs/1801.06…

微服务-01【续】

1.OpenFeign 上篇文章我们利用Nacos实现了服务的治理&#xff0c;利用利用RestTemplate实现了服务的远程调用。但是远程调用的代码太复杂了&#xff1a; 而且这种调用方式&#xff0c;与原本的本地方法调用差异太大&#xff0c;编程时的体验也不统一&#xff0c;一会儿远程调用…

43 搜索二维矩阵

43 搜索二维矩阵 43.1 搜索二维矩阵解决方案 解决思路&#xff1a; 将二维矩阵映射为一维数组的形式&#xff1a; 如果矩阵有m行和n列&#xff0c;那么二维矩阵的下标(row,col)可以通过以下公式映射为一维下表index&#xff1a; i n d e x r o w n c o l index row n co…

【LeetCode】每日一题 2024_12_13 K 次乘运算后的最终数组 I(暴力)

前言 每天和你一起刷 LeetCode 每日一题~ 小聊两句 1、今天是 12.13 南京大屠杀国家公祭日。铭记历史&#xff0c;勿忘国耻。 2、今天早上去看了 TGA 年度游戏颁奖&#xff0c;小机器人拿下了年度最佳游戏&#xff0c;所有人都震惊了&#xff0c;大伙纷纷问到&#xff0c;谁…

基于python实现自动化的验证码识别:探索与实践

基于python实现自动化的验证码识别&#xff1a;探索与实践 一、验证码的类型及特点&#xff08;一&#xff09;图像验证码&#xff08;二&#xff09;短信验证码&#xff08;三&#xff09;语音验证码 二、验证码识别的方法*&#xff08;一&#xff09;传统图像处理方法&#x…

红黑树(RBTree)

一、红黑树的概念 红黑树的每个节点都有颜色&#xff08;非黑即红&#xff09;&#xff0c;通过颜色来保证红黑树的平衡&#xff0c;是平衡搜索二叉树的一种。 二、红黑树的特性 1、任意一条路径上的节点都不能出现连续的红色节点。 2、最长路径不会超过最短路径的2倍。 3…