前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【LeetCode】23. Merge k Sorted Lists 分治

【LeetCode】23. Merge k Sorted Lists 分治

作者头像
韩旭051
发布2020-06-23 11:09:23
2790
发布2020-06-23 11:09:23
举报
文章被收录于专栏:刷题笔记刷题笔记

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

Example:

Input: [ 1->4->5, 1->3->4, 2->6 ] Output: 1->1->2->3->4->4->5->6

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/merge-k-sorted-lists 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分治第一道题,这道题还是主要看大家的答案做上来的~

学到的知识点有 c++语法

1.申请内存直接

代码语言:javascript
复制
new   ListNode *head = new ListNode(0);

2. 向量vector 转双端队列

代码语言:javascript
复制
queue<ListNode*> waiting(deque<ListNode*>(lists.begin(), lists.end())); //将vector转为队列

3.合并链表到最后小尾巴这里可以一步解决

代码语言:javascript
复制
p->next = l1 ? l1 : l2;
return head->next;

整一个空节点存头,最后返回空节点的下一个就是头

代码语言:javascript
复制
return head->next;

4.队列的神奇用法 pop两次融合成一个再push进去

代码语言:javascript
复制
while (waiting.size() > 1) {
            ListNode *l1 = waiting.front();
            waiting.pop();
            ListNode *l2 = waiting.front();
            waiting.pop();
            waiting.push(merge2(l1, l2));
        } 

放代码

代码语言:javascript
复制
/**
 * 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) {
        if(lists.size()==0){return NULL;}
        if(lists.size()==1){return lists[0];}
        queue<ListNode*> que(deque(lists.begin(),lists.end()));
        while(que.size()>1){
            ListNode* p1 =que.front();
            que.pop();
            ListNode* p2 =que.front();
            que.pop();
            que.push(mergelink(p1,p2));
        }
        return que.front();
    }
    ListNode* mergelink(ListNode* p1,ListNode*p2){
        ListNode* head = new ListNode(0);
        ListNode* p=head;
        while(p1&&p2){
            if(p1->val>p2->val){
                p->next=p2;
                p=p->next;
                p2=p2->next;
            }else{
                p->next=p1;
                p=p->next;
                p1=p1->next;
            }
        }
        p->next= p1? p1:p2;
        return head->next;
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分治第一道题,这道题还是主要看大家的答案做上来的~
  • 学到的知识点有 c++语法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档