【每日刷题】合并K个排序链表

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sd4567855/article/details/86134352

day14, 合并K个排序链表

题目来源:leetcode
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6

解答:先建立一个堆,之后再把链表中所有数字都放进去,之后遍历堆,一个一个弹出。。over

代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        priority_queue<int> record;
        for( int i = 0; i < lists.size(); i++){
            ListNode* P = lists[i];
            while( P){
                record.push( P->val);
                P = P->next;
            }
        }
        ListNode* L = ( ListNode *)malloc( sizeof( ListNode));
        L->next = NULL;
        while( !record.empty()){
            ListNode* temp = ( ListNode *)malloc( sizeof( ListNode));
            temp->val = record.top();
            record.pop();
            //头插法
            temp->next = L->next;
            L->next = temp;
        }
        return L->next;
    }
};

运行结果:
image.png-24.7kB


我的微信公众号

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sd4567855/article/details/86134352