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个时即为结果返回即可。

  • 相关阅读:
    左旋转字符串
    swoole(8)http服务
    整数反转
    两数之和
    广度优先搜索
    快速排序
    JavaScript当中的eval函数
    JavaScript中的作用域链原理
    git push和git pull
    cherry-pick,revert和rebase使用的3-way合并策略
  • 原文地址:https://www.cnblogs.com/wuyouwei/p/11773027.html
Copyright © 2011-2022 走看看