zoukankan      html  css  js  c++  java
  • leetcode 23. 合并K个排序链表

    题目描述:

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

    示例:

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

    思路分析:

    利用辅助空间求解,用最大堆来存链表中的每个节点,再一次一次从堆中取出,建表。

    需要注意输入的链表可能全为空,所以建完堆后,需要先判断一次堆是否为空,若为空,则直接输出空。

    代码:

     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     ListNode* mergeKLists(vector<ListNode*>& lists) {
    12         if(lists.size()==0)
    13             return nullptr;
    14         priority_queue<int> q;
    15         int k=lists.size();
    16         for(int i=0; i<k; i++)
    17         {
    18             ListNode* cur = lists[i];
    19             while(cur)
    20             {
    21                 q.push(cur->val);
    22                 cur = cur->next;
    23             }
    24         }
    25         if(q.empty())
    26             return nullptr;
    27         // ListNode* res = new ListNode(0);
    28         ListNode* pre = new ListNode(q.top());
    29         q.pop();
    30         while(!q.empty())
    31         {
    32             ListNode* tmp = new ListNode(q.top());
    33             q.pop();
    34             tmp->next = pre;
    35             pre = tmp;
    36         }
    37         return pre;
    38     }
    39 };
  • 相关阅读:
    Hash表的查找-C语言
    二叉排序树-C语言
    线性表的查找算法-C语言
    拓扑排序和关键路径
    图结构的创建与遍历-C语言
    MySQL数据库基本脚本命令
    哈夫曼树编码-C语言
    协程简述
    Python多线程编程-Threading库
    Python多进程编程-multiprocessing库
  • 原文地址:https://www.cnblogs.com/LJ-LJ/p/11449315.html
Copyright © 2011-2022 走看看