欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 算法2(蓝桥杯19)-合并两个有序链表

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

2025/4/22 11:17:51 来源:https://blog.csdn.net/2301_76648183/article/details/144435981  浏览:    关键词:算法2(蓝桥杯19)-合并两个有序链表

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

解题思路:

创建一个虚拟节点,循环比较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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词