0023.Merge K Sorted Lists

23.Merge K Sorted Lists #

题目 #

You are given an array of k linked-lists lists, each linked-list is sorted in ascending order. Merge all the linked-lists into one sorted linked-list and return it.

Example 1:

Input: lists = [[1,4,5],[1,3,4],[2,6]]
Output: [1,1,2,3,4,4,5,6]
Explanation: The linked-lists are:
[
  1->4->5,
  1->3->4,
  2->6
]
merging them into one sorted list:
1->1->2->3->4->4->5->6

Example 2:

Input: lists = []
Output: []

Example 3:

Input: lists = [[]]
Output: []

Constraints:

k == lists.length
0 <= k <= 10^4
0 <= lists[i].length <= 500
-10^4 <= lists[i][j] <= 10^4
lists[i] is sorted in ascending order.
The sum of lists[i].length won't exceed 10^4.

代码 #

use std::collections::BinaryHeap;
impl Solution {
    pub fn merge_k_lists(lists: Vec<Option<Box<ListNode>>>) -> Option<Box<ListNode>> {
        let mut numbers: BinaryHeap<i32> = BinaryHeap::new();

        for mut node in lists.iter() {
            while *node != None {
                let value = (*node).as_ref().unwrap().val;
                numbers.push(value);    
                node = &(*node).as_ref().unwrap().next;
            }
        }

        let mut h = ListNode::new(0);

        while let Some(value) = numbers.pop() {
            let mut p = Box::new(ListNode::new(value));
            p.next = h.next;
            h.next = Some(p);
        }

        return h.next;
    }
}