Merge K sorted List

   private static final Comparator<ListNode> listComparator = new Comparator<ListNode>() {
        @Override
        public int compare(ListNode o1, ListNode o2) {
            return o1.val - o2.val;
        }
    };

    public ListNode mergeKLists(List<ListNode> lists) {
        if (lists == null || lists.isEmpty()) return null;

        Queue<ListNode> queue = new PriorityQueue(lists.size(), listComparator);

        for (ListNode node : lists) {
            if (node != null)
                queue.add(node);
        }

        ListNode dummyHead = new ListNode(0);
        ListNode p = dummyHead;
        while (!queue.isEmpty()) {
            ListNode node = queue.poll();
            p.next = node;
            p = p.next;
            if (node.next != null) {
                queue.add(node.next);
            }
        }
        return dummyHead.next;
    }