题目:

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

示例:

输入:
[
  1->4->5,
  1->3->4,
  2->6
]
输出: 1->1->2->3->4->4->5->6
看到这道题,能想起来昨天我写的有一篇和这个题有些类似的博客,【合并两个有序的链表】
因此这个题的思路就是
  1.k个有序的链表,根据我们之前做的那道题,应该采用两两合并,也就是累加法,最后合并到一起去
  2.两个链表的长度可能不一样,我们需要考虑补全的问题。
代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
ListNode res = new ListNode(0); //设置结果
if(lists == null || lists.length < 0){
return null;
}else if(lists.length == 1){
return lists[0];
}else if(lists.length == 2){
mergeTwoLists(lists[0],lists[1]);
}else{
res = mergeTwoLists(lists[0],lists[1]);
for(int i = 2; i < lists.length;i++){
mergeTwoLists(res,lists[i]);
}
}
return res;
} public ListNode mergeTwoLists(ListNode l1,ListNode l2){
ListNode res = new ListNode(0);
ListNode tmp = res; while(l1 != null && l2 != null){
if(l1.val < l2.val){
tmp.next = l1;
l1 = l1.next;
}else{
tmp.next = l2;
l2 = l2.next;
}
tmp = tmp.next;
}
//后面是为了补全的,因为链表的长度可能不一样
if(l1 != null){
tmp.next = l1;
}else{
tmp.next = l2;
}
return res.next;
}
}

在别的博客中看到另一种解法,就是用优先队列,感觉挺高大上的,所以贴出来和大家分享,只是上面的方法我们容易理解一些罢了。

代码如下:

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if(lists == null || lists.length < 0){
return null;
}
PriorityQueue<Integer> queue = new PriorityQueue();
for(ListNode node:lists){
while(node != null){
queue.add(node.val);
node = node.next;
}
}
ListNode res = new ListNode(0);
ListNode tmp= res;
while(!queue.isEmpty()){
ListNode temp = new ListNode(queue.poll());
tmp.next = temp;
tmp = tmp.next;
}
return res.next;
}
}
 

合并K个排序链表(java实现)的更多相关文章

  1. leetcode 23. 合并K个排序链表 JAVA

    题目: 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2->6 ] 输出: ...

  2. Java实现 LeetCode 23 合并K个排序链表

    23. 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输 ...

  3. [LeetCode] 23. 合并K个排序链表

    题目链接: https://leetcode-cn.com/problems/merge-k-sorted-lists/ 题目描述: 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂 ...

  4. LeetCode 23. 合并K个排序链表(Merge Two Sorted Lists)

    23. 合并K个排序链表 23. Merge k Sorted Lists 题目描述 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. LeetCode23. Merge k S ...

  5. leecode刷题(27)-- 合并k个排序链表

    leecode刷题(27)-- 合并k个排序链表 合并k个排序链表 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1-> ...

  6. 【LeetCode】23.合并K个排序链表

    题目描述 23.合并K个排序链表 合并k个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] ...

  7. [Swift]LeetCode23. 合并K个排序链表 | Merge k Sorted Lists

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

  8. 合并K个排序链表

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2->6 ] 输出: 1-&g ...

  9. 0008 合并K个排序链表

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2->6 ] 输出: 1-&g ...

随机推荐

  1. get请求02

    import requests r = requests.get("http://www.baidu.com") print(r.status_code) #状态码 print(r ...

  2. ubuntu 16.04 搭建tigervnc

    主要参考 https://vitux.com/ubuntu-vnc-server/ apt install xfce4 xfce4-goodies -yapt install -y tightvncs ...

  3. vue移动端适配

    https://www.w3cplus.com/mobile/vw-layout-in-vue.html

  4. vs2017 .net core 项目调试浏览器网页闪退Bug

    from:https://blog.csdn.net/qq_36330228/article/details/82152187 vs更新2017最新版本后,项目调试浏览器莫名其妙出现闪退,每次都TMD ...

  5. pycharm的断点调试与TODO标记

    断点调试的方法: 断点调试在程序比较大的时候调试运用的比较多 点击Pycharm软件右上角绿色三角形右边的小甲鱼图标,点击之后会弹出断点调试的界面 Debug是用来调试bug的 terminal 是终 ...

  6. Spring Boot:快速入门(二)

    学习完成怎么搭建一个独立Spring Boot项目后,上面是整理出来的一些相关文件以及用途. 原本是一个Excel文件,拷贝到博客园就成了图片,当做几个笔记了,用到的时候可以查阅,也欢迎转载,收藏. ...

  7. OpenStack-Neutron-Fwaas-代码【二】

    上一节从代码层面来讲解了fwaas的流程,这里通过具体查看iptables规则来说下应用规则的流程: 1.首先通过命令获取当前路由中的规则 #ip netns exec qrouter-[router ...

  8. oracle 11g 安装步骤

    指定安装路径 输入数据库名(cwbpm),(按照自己要求输入,可以直接用默认库名) 输入密码(自定义):123456 (自定义密码) 下一步 选择“是” 点击完成,开始安装数据库 安装完成后会弹出页面 ...

  9. SpringCloud入门之应用程序上下文服务(Spring Cloud Context)详解

    构建分布式系统非常复杂且容易出错.Spring Cloud为最常见的分布式系统模式提供了简单易用的编程模型,帮助开发人员构建弹性,可靠和协调的应用程序.Spring Cloud构建于Spring Bo ...

  10. laravel ServiceProvider 加载顺序

    主要看一下代码: public function registerConfiguredProviders(){//读取app的配置,然后,分成两部分Illuminate开始的,和其他的 $provid ...