输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
function ListNode(val) {
this.val = val;
this.next = null;
}
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
// 放入数组的时候就排序
const mergeTwoLists = function(l1, l2) {
let arr = []
while (l1 && l1.val !== undefined) {
arr.unshift(l1.val)
l1 = l1.next
}
while (l2 && l2.val !== undefined) {
if (!arr.length) {
arr.push(l2.val)
} else if (l2.val <= arr[arr.length - 1]) {
arr.push(l2.val)
} else if (l2.val >= arr[0]) {
arr.unshift(l2.val)
} else {
// 条件满足 都要遍历一下数组 耗时
for (let i = 0; i < arr.length; i++) {
if (
l2.val <= arr[i] &&
l2.val >= arr[i + 1]
) {
arr.splice(i + 1, 0, l2.val)
break
}
}
}
l2 = l2.next
}
return arr.reduce((next, val) => ({val, next}), null)
};
// 最后处理数据的时候排序
const mergeTwoLists = function(l1, l2) {
let arr = []
while (l1 && l1.val != undefined) {
arr.push(l1.val)
l1 = l1.next
}
while (l2 && l2.val != undefined) {
arr.push(l2.val)
l2 = l2.next
}
arr = arr.sort((a, b) => b - a) // 排序 再处理
return arr.reduce((next, val) => ({val, next}), null)
};