合并两个有序链表
非递归
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; } };
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。