LeetCode Merge k Sorted Lists

2015-07-20 17:18:22 · 作者: · 浏览: 5

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

题意:将k个已经排好序的链表合并成一个

思路:用到优先队列比较简单。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
struct cmp{
    bool operator() (ListNode *a, ListNode *b) {
        return a->val > b->val;
    }
};

class Solution {
public:
    ListNode *mergeKLists(vector
  
    &lists) {
        priority_queue
   
    , cmp> queue; for (int i = 0; i < lists.size(); i++) { if (lists[i] != NULL) queue.push(lists[i]); } ListNode *head = NULL, *pre = NULL, *tmp; while (!queue.empty()) { tmp = queue.top(); queue.pop(); if (pre == NULL) head = tmp; else pre->next = tmp; pre = tmp; if (tmp->next != NULL) queue.push(tmp->next); } return head; } };