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

打印 上一主题 下一主题

主题 820|帖子 820|积分 2460

题目:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的全部节点组成的。
解题思绪:
创建一个虚拟节点,循环比力l1、l2链表各节点的巨细,将较小的节点追加到虚拟节点后,返回新链表

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


2、创建一个虚拟节点(哑结点),让当前节点指向虚拟节点
哑结点(dummy node)是一种在链表操纵中常用的本领,它代表一个暂时的、不存储有用数据的节点。哑结点通常用作链表的头部或某个操纵的起始点,从而简化界限条件的处置惩罚。



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


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





5、返回新链表
        

6、完备代码
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>合并两个有序链表</title>
  7. </head>
  8. <body>
  9.     <p>
  10.         <h4>
  11.             挑战内容
  12.         </h4>   
  13.         将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
  14.     </p>
  15.     <p>
  16.         输入:l1 = 1 -> 2 -> 4 -> null, l2 = 1 -> 3 -> 4 -> null
  17.         输出:1 -> 1 -> 2 -> 3 -> 4 -> 4 -> null
  18.     </p>
  19. </body>
  20. <script>
  21.     // 定义链表节点结构
  22.     function ListNode(val,next=null){
  23.         this.val=val
  24.         this.next=next
  25.     }
  26.     // 测试数据
  27.     let l1=new ListNode(1,new ListNode(2,new ListNode(4)))
  28.     let l2 = new ListNode(1, new ListNode(3, new ListNode(4)))
  29.     mergeTwoLists(l1,l2)
  30.     function mergeTwoLists(l1, l2) {
  31.         // 查看测试数据是否正确
  32.         // console.log(l1,l2);
  33.         // 创建一个虚拟节点
  34.         let node = new ListNode(0)
  35.         // 当前节点
  36.         let cur = node
  37.         // 遍历l1、l2
  38.         while (l1 !== null && l2 !== null) {
  39.             // l1某个节点上的值<=l2某个节点上的值时
  40.             if(l1.val <= l2.val){
  41.                 cur.next= l1
  42.                 l1 = l1.next
  43.             }else{
  44.                 cur.next=l2
  45.                 l2=l2.next
  46.             }
  47.             // 当有节点在下一位时(新增了l1/l2节点),当前节点的指针指向下一个节点
  48.             cur=cur.next
  49.         }
  50.         // 遍历完后(即有l1/l2的长度为空),将剩余链表(剩余的有序节点)接入后面即可
  51.         if (l1 !== null) {
  52.             cur.next=l1
  53.         }
  54.         if (l2 !== null) {
  55.             cur.next = l1
  56.         }
  57.         // console.log(node.next);
  58.         
  59.         // 返回新链表
  60.         return node.next
  61.         }
  62. </script>
  63. </html>
复制代码

注:在提交时必要将定义的链表结构一同提交,即如下:
  1.   // 定义链表节点结构
  2.   function ListNode(val,next=null){
  3.     this.val=val
  4.     this.next=next
  5. }
  6. function mergeTwoLists (l1, l2) {
  7.        // 创建一个虚拟节点
  8.        let node = new ListNode(0)
  9.        // 当前节点
  10.        let cur = node
  11.        // 遍历l1、l2
  12.        while (l1 !== null && l2 !== null) {
  13.            // l1某个节点上的值<=l2某个节点上的值时
  14.            if(l1.val <= l2.val){
  15.                cur.next= l1
  16.                l1 = l1.next
  17.            }else{
  18.                cur.next=l2
  19.                l2=l2.next
  20.            }
  21.            // 当有节点在下一位时(新增了l1/l2节点),当前节点的指针指向下一个节点
  22.            cur=cur.next
  23.        }
  24.        // 遍历完后(即有l1/l2的长度为空),将剩余链表(剩余的有序节点)接入后面即可
  25.        if (l1 !== null) {
  26.            cur.next=l1
  27.        }
  28.        if (l2 !== null) {
  29.            cur.next = l2
  30.        }
  31.        // console.log(node.next);
  32.       
  33.        // 返回新链表
  34.        return node.next
  35. }
  36. module.exports = mergeTwoLists
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南飓风

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表