23. Merge k Sorted Lists
题目简介
/**
* @param {ListNode[]} lists
* @return {ListNode}
*/
题目给我们一个由链表组成的数组 lists,其中的每一个链表都是升序排序
要求我们把 lists 中的所有链表组合成一个升序排序的链表
解题思路
这道题其实是 21. Merge Two Sorted Lists 的复杂版本,但是思路也是一样的
我们只要从 lists 中选出链表两两通过 21 题的算法合并,最后合并到只剩一个链表即可
Javascript
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode[]} lists
* @return {ListNode}
*/
var mergeKLists = function (lists) {
if(!Array.isArray(lists) || lists.length === 0) {
return null
}
while (lists.length > 1) {
let arr = []
for (let i = 0; i < lists.length; i += 2) {
const list1 = lists[i]
const list2 = i + 1 < lists.length ? lists[i + 1] : null
arr.push(mergeTwoLists(list1, list2))
}
lists = arr
}
return lists[0]
};
var mergeTwoLists = function (list1, list2) {
const dummy = new ListNode()
let cur = dummy
while (list1 && list2) {
if (list1.val < list2.val) {
cur.next = list1
list1 = list1.next
} else {
cur.next = list2
list2 = list2.next
}
cur = cur.next
}
cur.next = list1 ? list1 : list2
return dummy.next
};