//用优先队列比较大小,用尾插法将较小的节点进行连接。
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; }