头图

合并两个有序链表

  1. 非递归

    var mergeTwoLists = function (l1, l2) {
     // 虚拟头节点
     let dummy = new ListNode(-1);
     let p = dummy;
     // 两个链表都有值的情况
     while (l1 != null && l2 != null) {
         // 比较 l1 和 l2 两个指针,将值较小的的节点接到 p 指针
         if (l1.val < l2.val) {
             p.next = l1;
             l1 = l1.next;
         } else {
             p.next = l2;
             l2 = l2.next;
         }
         // p 指针不断前进
         p = p.next;
     }
     p.next = l1 == null ? l2 : l1;
     return dummy.next;
    };

    2.递归法

    var mergeTwoLists = function (l1, l2) {
     //递归的结束条件,如果l1和l2中有一个为空就返回
     if (l1 == null || l2 == null) {
         return l1 == null ? l2 : l1;
     }
     //如果l1的值<=l2的值,就继续递归,比较l1.next的值和l2的值
     if (l1.val <= l2.val) {
         //l1.next和l2比较完后,会产生一个更小的节点x,将x加到当前l1的后面
         l1.next = mergeTwoLists(l1.next, l2);
         return l1;
     } else {
         //如果l1的值>l2的值,就继续递归,比较l1的值和l2.next的值
         l2.next = mergeTwoLists(l1, l2.next);
         return l2;
     }
    };

全栈冲冲冲
1 声望0 粉丝

知识不应该区别国界,每个人生活在这个美好的时代都应该贡献自己的价值,我们国内的程序员工程师都应该多学本职以外的IT知识,不要局限于应用层,让我国的IT行业更加茁壮成长


引用和评论

0 条评论