[LeetCode]23 Merge k Sorted Lists

https://oj.leetcode.com/problems/merge-k-sorted-lists/

http://fisherlei.blogspot.com/2012/12/leetcode-merge-k-sorted-lists.html

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode mergeKLists(List<ListNode> lists) {
        
        if (lists == null || lists.isEmpty())
            return null;

        // 如果不使用heap,需要定义一个函数找出最小node
        //
        // Define a min heap
        PriorityQueue<ListNode> heap = new PriorityQueue<ListNode>(lists.size(), 
        new Comparator<ListNode>()
        {
            public int compare(ListNode a, ListNode b)
            {
                return Integer.compare(a.val, b.val);
            }
        });
        
        // Build the min heap
        for (ListNode node : lists)
        {
            if (node != null)
            {
                heap.offer(node);
            }
        }
        
        ListNode head = null;
        ListNode tail = null;
        while (!heap.isEmpty())
        {
            ListNode node = heap.poll();

            if (head == null)
                head = node;
                
            if (tail != null)
                tail.next = node;
            tail = node;
            
            ListNode nextnode = node.next;
            if (nextnode != null)
                heap.offer(nextnode);
        }
        
        return head;
    }
}


你可能感兴趣的:(LeetCode)