博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode-Merge k Sorted Lists-合并k个排序链表-自底向上归并排序+链表操作
阅读量:5138 次
发布时间:2019-06-13

本文共 1078 字,大约阅读时间需要 3 分钟。

https://oj.leetcode.com/problems/merge-k-sorted-lists/

自底向上的归并排序,用一个step控制需要合并次数,每次都把相邻的两个表合并成一个大表存在第一个表原先所在的位置上。然后step扩大两倍。需要注意的是最后一个表如果i+step>n-1,则说明这个表只有一个。

另外链表操作时需要注意更新所有需要更新的指针,并且正确的更新头指针,这个很容易出错。

class Solution {public:	int n,m;	vector
lists; void Merge(int a,int b){ ListNode *h1=lists[a]; ListNode *h2=lists[b]; if (h1==NULL){ lists[a]=h2; return; } if (h1==h2){ return; } ListNode *p,*q,*lp,*h; lp=NULL; p=h1; q=h2; h=h1; while(q!=NULL && p!=NULL){ if (p->val>q->val){ if (lp!=NULL) { lp->next=q; } else{ h=q; } ListNode *qq=q; q=q->next; qq->next=p; lp=qq; continue; } if (lp==NULL){ h=p; } lp=p; p=p->next; } if (p==NULL) lp->next=q; lists[a]=h; } ListNode *mergeKLists(vector
&lists) { n=lists.size(); if (n==0){return NULL;} this->lists=lists; int step=2; while(step<=2*(n-1)){ for (int i=0;i
=n){ break; } Merge(i,b); } step*=2; } return this->lists[0]; }};

  

转载于:https://www.cnblogs.com/yangsc/p/4011511.html

你可能感兴趣的文章
Eclipse集成Git做团队开发
查看>>
1000个数,求相邻数之和的最大值(结对完成作业)
查看>>
Longest Continuous Increasing Subsequence
查看>>
PAT: 1003 Emergency
查看>>
关于阅读书籍的一点点感悟
查看>>
ionic Hide tabs 实现
查看>>
团队编程项目进度
查看>>
Python的全局解释锁(GIL)
查看>>
Hiberbate 集合属性
查看>>
使用maven属性变量和配置文件
查看>>
jQuery 源码解析二:jQuery.fn.extend=jQuery.extend 方法探究
查看>>
RequestMethod.DELETE相关,如何用jquery实现RequestMethod.DELETE请求
查看>>
正则表达式获取URL参数
查看>>
一分钟学会Xmind
查看>>
iOS开发基础篇-Button基础
查看>>
Excel-在整个工作簿中查找/替换
查看>>
eclipse 快捷键
查看>>
[原]sdut2605 A^X mod P 山东省第四届ACM省赛(打表,快速幂模思想,哈希)
查看>>
Android深度探索第十章
查看>>
Brief introduction to Scala and Breeze for statistical computing
查看>>