//用优先队列比较大小,用尾插法将较小的节点进行连接。
public ListNode mergeKLists(ArrayList<ListNode> lists) {
if(lists==null) return null;
//重写比较器
PriorityQueue<ListNode> priorityQueue=new PriorityQueue<>(new Comparator<ListNode>() {
@Override
public int compare(ListNode o1, ListNode o2) {
return o1.val-o2.val;
}
});
for (ListNode listNode:lists){
//对于空节点 需要进行过滤掉
if (listNode==null) continue;
priorityQueue.add(listNode);
}
ListNode pre = new ListNode(0);
ListNode res = pre;
while (priorityQueue.size()>0){
ListNode ln=priorityQueue.poll();
pre.next = ln;
pre=ln;
if (ln.next!=null) {
//将弹出节点的下一个节点加入到队列中进行比较
priorityQueue.add(ln.next);
}
}
return res.next;
}
京公网安备 11010502036488号