#21 合并两个有序链表
题解
思路1:递归
- 思路
- 分析时间复杂度空间复杂度
- 代码实现
var mergeTwoLists = function (l1, l2) {
// 递归终止条件 l1和l2都没有的时候
if (!l1) return l2
if (!l2) return l1
if (l1.val > l2.val) {
// 调用递归 返回下一个小的
l2.next = mergeTwoLists(l1, l2.next)
// 本层递归需要判断谁小,谁小返回谁
return l2
} else {
l1.next = mergeTwoLists(l1.next, l2)
return l1
}
};
思路1:迭代
- 分析时间复杂度空间复杂度
- 代码实现
var mergeTwoLists = function (l1, l2) {
if (!l1 && !l2) return null
if (!l1 || !l2) return l1 ? l1 :l2
let newHead = new ListNode(null), cur = newHead
while (l1 && l2) {
if (l1.val > l2.val) {
cur.next = l2
l2 = l2.next
} else {
cur.next = l1
l1 =l1.next
}
cur = cur.next
}
cur.next = l1 ? l1 : l2
return newHead.next
};
简化版代码
var mergeTwoLists = function (l1, l2) {
if (!l1 && !l2) return null
if (!l1 || !l2) return l1 ? l1 :l2
let newHead = new ListNode(null), cur = newHead
while (l1 && l2) {
l1.val > l2.val ? [cur.next,l2] = [l2,l2.next] :[cur.next,l1] = [l1,l1.next]
cur = cur.next
}
cur.next = l1 ? l1 : l2
return newHead.next
};