题目要求
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
解题思路一(推荐)
这题用了递归的思路,一共六行,很是精简,非常值得学习。
首先判断是否有一个链表为空,有,则返回不为空的链表。
若都不为空,选择值小的链表作为l1。当递归返回的时候,就会串成一个从小到大的链表。
var mergeTwoLists = function(l1, l2) {
if (!l1 || !l2) // return the non-empty one
return l1 || l2
if (l1.val > l2.val) // l1和l2交换位置,保证l1一直小于l2
[l1, l2] = [l2, l1]
l1.next = mergeTwoLists(l1.next, l2)
return l1;
};