题解 | #合并k个已排序的链表#
合并k个已排序的链表
https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类ArrayList * @return ListNode类 */ public ListNode mergeKLists (ArrayList<ListNode> lists) { // 自定义比较器:默认就是从小到大排列 Comparator<ListNode> comparator = Comparator.comparingInt(node -> node.val); PriorityQueue<ListNode> queue = new PriorityQueue<>(comparator); for (ListNode head : lists) { // 测试用例 里面又一个 空的链表 所以要判断空 如果把空的加入到 queue里面 会出现问题 null 调用触发空指针异常 if (head != null) { queue.offer(head); } } // 自定义头结点 注意返回的是dumy.next ListNode dummy = new ListNode(0); ListNode current = dummy; // 循环结束条件是 queue不空 如果空了 表示全部处理完毕了 while (!queue.isEmpty()) { // 出对一个小的值 把后一个加入进来 但是要判断是不是null ListNode polled = queue.poll(); if (polled.next != null) { queue.offer(polled.next); } // 指针后移一位 current.next = polled; current = current.next; } return dummy.next; } }