zoukankan      html  css  js  c++  java
  • 【Leetcode】合并K个排序链表

    题目链接:合并K个排序链表


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


    题解:这题的前身是合并两个排序链表。在剑指里有写。可以点击链接查看。。

    这个题,最好就是用小顶堆,O(nlog(K))。用c++的优先队列可以解决这个小顶堆。

    把每个节点丢进优先队列,然后以出队列的顺序作为新链表顺序


    代码:

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     //优先队列重载cmp函数
    12     struct cmp{
    13         bool operator()(ListNode* a,ListNode* b){
    14             return a->val > b->val; //小顶堆
    15         }
    16     };
    17 
    18     ListNode* mergeKLists(vector<ListNode*>& lists) {
    19         priority_queue<ListNode* ,vector<ListNode*> , cmp> que;
    20         for(auto head:lists){
    21             if(head)   que.push(head);
    22         }
    23 
    24         ListNode* ans = new ListNode(0);
    25         ListNode* res = ans;
    26 
    27         while(!que.empty()){
    28             ListNode* p = que.top();
    29             que.pop();
    30             if(p->next){
    31                 que.push(p->next);
    32             }
    33             res->next = p;
    34             res = res->next;
    35         }
    36         return ans->next;
    37     }
    38 };
  • 相关阅读:
    适者生存还是强者生存
    写给十岁的清为
    毕业后的十年
    Python3 字符编码
    线段树模板
    F
    E
    D
    C
    B
  • 原文地址:https://www.cnblogs.com/Asumi/p/12513914.html
Copyright © 2011-2022 走看看