题目链接:题目链接
题目大意描述:给定k个有序链表,合成一个有序链表
题目思路:维护两个数组一个存整数一个存负数,统计所有链表中的数字;再遍历数组,新建count[i]个节点并接在链表后面。
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode[]} lists
* @return {ListNode}
*/
var mergeKLists = function(lists) {
let Len=lists.length;
let counts=[];
let negative =[];
let L=new ListNode(0);
const head=L;
for(let i=0;i<Len;i++){ //遍历所有链表,统计链表中数字ListNode.value的个数
let tmpNode=lists[i];
while(tmpNode!=null){ //扫描链表
let value=tmpNode.val;
if(value<0){
value=0-value;
if(!!!negative[value]){ negative[value]=0; }
negative[value]+=1;
}else{
if(!!!counts[value]){ counts[value]=0; }
counts[value]+=1;
}
tmpNode=tmpNode.next;
}
}
for(let i=negative.length-1;i>=0;i--){// 负数
while(negative[i]>0){
let node=new ListNode((0-i));
L.next=node;
L=L.next;
negative[i]--;
}
}
for(let i=0;i<counts.length;i++){ //非负数
while(counts[i]>0){
let node=new ListNode(i);
L.next=node;
L=L.next;
counts[i]--;
}
}
return head.next;
};