zoukankan      html  css  js  c++  java
  • 合并n个链表

      

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

    示例:

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

      

        public static ListNode mergeKLists(ListNode[] lists){
            int count=lists.length/2+lists.length%2;
            if(count==0){
                return null;
            }
            ListNode[] newLists=new ListNode[count];
            for(int i=0;i<lists.length;i=i+2){
                if(lists.length<=i+1){
                    newLists[count-1]=lists[i];
                    break;
                }
                newLists[i/2]=mergeTwoLists(lists[i],lists[i+1]);
            }
            if(newLists.length>1){
               return mergeKLists(newLists);
            }
            return newLists.length==0?null:newLists[0];
        }
    View Code
        public static ListNode mergeTwoLists(ListNode l1,ListNode l2){
            ListNode dumb=new ListNode(0);
            ListNode head=dumb;
            while (l1!=null&&l2!=null){
              if(l1.val<l2.val){
                dumb.next=l1;
                l1=l1.next;
              }else{
                dumb.next=l2;
                l2=l2.next;
              }
              dumb=dumb.next;
            }
            dumb.next=(l1==null?l2:l1);
            return head.next;
        }
    View Code

    思路:

      1.集合里的链表2个合并在一起放入新的集合中。

      2.新集合的大小为  原集合大小整除2加上原集合大小整除2取模。

      3.将新集合递归调用,当新集合里的元素只有1个时即为结果返回即可。

  • 相关阅读:
    centos 编程环境
    git 安装 使用
    nodejs 笔记
    微信开发
    composer 使用笔记
    一:安装centos 7最小编程环境 xfce桌面
    二: 安装centos服务环境软件mysql httpd php
    我的通用程序规范及说明
    常用js代码集
    三 , lnmp 一键包安装使用
  • 原文地址:https://www.cnblogs.com/wuyouwei/p/11773027.html
Copyright © 2011-2022 走看看