1.用最小堆解决这个问题会更好。
2.注意从小到大用大于号。
3.最后只需要循环的放入后续元素即可。
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    struct cmp{
        bool operator()(ListNode * a ,ListNode * b){
            return a->val > b->val;
        }
    };
    ListNode *mergeKLists(vector<ListNode *> &lists) {
       //最小堆
       if(!lists.size()) return NULL;
        ListNode* dummy = new ListNode(-1);
        ListNode* p = dummy;
        //最小堆
        priority_queue<ListNode*, vector<ListNode*>,cmp> pq;
        for(ListNode* head:lists){
            if(head){
                pq.push(head);
            }
        }
        while(!pq.empty()){
            ListNode* node = pq.top();
            pq.pop();
            if(node->next){
                pq.push(node->next);
            }
            p->next = node;
            p = p->next;
        }
        return dummy->next;
    }
};
京公网安备 11010502036488号