Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
Example:
Input: 1->2->4, 1->3->4Output: 1->1->2->3->4->4
解法一: 链表, 类似归并排序的合并过程, 见归并排序
/*** Definition for singly-linked list.* function ListNode(val) {* this.val = val;* this.next = null;* }*//*** @param {ListNode} l1* @param {ListNode} l2* @return {ListNode}*/var mergeTwoLists = function (l1, l2) {const dummyLink = new ListNode(0)let cur = dummyLinklet l1Point = l1let l2Point = l2while (l1Point && l2Point) {if (l1Point.val < l2Point.val) {cur.next = l1Pointl1Point = l1Point.next} else {cur.next = l2Pointl2Point = l2Point.next}cur = cur.next}while (l1Point) {cur.next = l1Pointcur = cur.nextl1Point = l1Point.next}while (l2Point) {cur.next = l2Pointcur = cur.nextl2Point = l2Point.next}return dummyLink.next}
解法二: 递归
/*** Definition for singly-linked list.* function ListNode(val) {* this.val = val;* this.next = null;* }*//*** @param {ListNode} l1* @param {ListNode} l2* @return {ListNode}*/var mergeTwoLists = function (l1, l2) {if (l1 === null) {return l2}if (l2 === null) {return l1}if (l1.val < l2.val) {l1.next = mergeTwoLists(l1.next, l2)return l1} else {l2.next = mergeTwoLists(l1, l2.next)return l2}}