合并两个有序链表

  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; }};