leetcode 23. Merge k Sorted Lists 合并k个排序链表 优先级队列

来源:互联网 发布:iphone照片拷贝到mac 编辑:程序博客网 时间:2024/05/22 01:45

1、使用优先级队列

建立一个最小堆,保存这k个链表,最小堆的排序规则是链表首元素的大小比较,较小的排在前面。建立一个新的表头,对于堆顶,依次连接,如果堆顶的链表还有下面的元素,将其放入堆中,依次进行,知道链表为空。注意链表为空的情况。

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    struct compare{    bool operator()(ListNode* a,ListNode* b){        return a->val>b->val;    }    };    ListNode* mergeKLists(vector<ListNode*>& lists) {        priority_queue<ListNode*,vector<ListNode*>,compare> q;;                for(auto List:lists)        {            if(List)            q.push(List);        }                if(q.empty()) return nullptr;        ListNode* result=q.top();        q.pop();        ListNode* cur=result;        if(cur->next)            q.push(cur->next);        while(!q.empty())        {            ListNode* temp=q.top();            q.pop();            cur->next=temp;            if(temp->next) q.push(temp->next);            cur=cur->next;        }        return result;    }};


阅读全文
0 0
原创粉丝点击