合并K个排序链表

今天是刷leetcode打卡的第3天。每日一次,例行打气。

今天看到leetcode推荐了一道题名字叫“合并K个排序链表”
题目描述:
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例输入:
[[1,4,5],[1,3,4],[2,6]]
示例输出:
[1,1,2,3,4,4,5,6]

稍微一看,哦吼,这不就是链表合并嘛,我们首先可以想到的是一个while() 循环,安排它一手,可是定睛一看,不对,这是K个链表,那总不能while() 套while() 啊 ,那岂不是太复杂。
后来我想遍了我脑海中所有的数据结构,突然发现了C++里面有一个好东西叫做 ----> “优先队列” 这简直就是雪中送炭啊。
思路: 使用优先队列,先把所有的元素放进优先队列中,大的放在前面,然后再用链表的头插法就变成了一个降序的有序链表。
话不多说,安排

/** 
* 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> a;
        for(int i = 0; i < lists.size();i++){
            while(lists[i] != NULL){
                a.push(lists[i]->val);
                lists[i] = lists[i]->next;
            }
        }
                            
      ListNode* newHead = NULL;
      while(!a.empty()){
      ListNode* pTemp = new ListNode();
      pTemp->val = a.top();
      pTemp->next = newHead;            
      newHead = pTemp;            
      a.pop();        
      }        
      return newHead;    
      }
 };

有人说,你若盛开,蝴蝶自来
可是他不知道的是,当你盛开的时候,来到你面前的那个蝴蝶却不是你日思夜想的那个蝴蝶。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值