题目描述
测试样例
示例 1:
输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[
1->4->5,
1->3->4,
2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6
示例 2:
输入:lists = []
输出:[]
示例 3:
输入:lists = [[]]
输出:[]
示例代码:
/**
* 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) {
const h = lists ? lists.length : 0;
if(h === 0) return null;
if(h === 1) return lists[0];
const transform=(list, arr) =>{
while(list) {
arr.push(list.val);
list = list.next;
}
}
// 用于存储将每个节点的值
let arr = [];
lists.forEach(item => transform(item, arr));
arr.sort((a, b) => a - b);
// 创建虚拟头节点
let head = new ListNode(-1);
let p = head
for(let i = 0;i<arr.length;i++) {
let newNode = new ListNode(arr[i])
p.next=newNode
p= newNode
}
return head.next
};
代码说明
- 遍历所有链表,将其节点的值添加到数组中
- 对数组元素进行排序
- 遍历数组生成链表
标签:arr,val,23,list,lists,next,链表,升序 From: https://www.cnblogs.com/zx529/p/16789350.html上述思路比较简单,但并不是明智之举,只是能够将问题解决,仅供参考。
需要注意的是对于边界的处理我们可以采用虚拟头节点的方式来解决