zoukankan      html  css  js  c++  java
  • 合并K个排序链表

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

    示例:

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

    思路:归并排序+双链表排序。将问题分解为子问题,两两归并。

    代码:

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode mergeKLists(ListNode[] lists) {
           int n=lists.length;
            if(n==0)return null;
            while (n > 1) {             //两两归并有序链表,单个链表不处理
                int k=(n + 1)/2;        //两两归并之后的链表个数
                for (int i=0; i<n/2; i++) {
                    lists[i]=merge(lists[i],lists[i+k]);//比如6个链表,0-3   1-4   2-5 
                }
                n = k;     
            }
            return lists[0];
           }
        //合并两个有序链表,使用的递归
        public ListNode merge(ListNode l1,ListNode l2){
            ListNode head=null;
            if(l1==null)return l2;
            if(l2==null)return l1;
                if(l1.val>l2.val){
                    head=l2;
                    head.next=merge(l1,l2.next);
                }else {
                    head=l1;
                    head.next=merge(l1.next,l2);
                }  
            return head;
        }
        
        
    }
  • 相关阅读:
    python3之Django内置模板标签和过滤器
    JavaScript(1)
    python3之Django基础篇
    CSS
    HTML
    python3之SQLAlchemy
    python3之memcached
    web服务器-nginx虚拟主机
    web服务器-nginx默认网站
    web服务器-Nginx下载限速
  • 原文地址:https://www.cnblogs.com/patatoforsyj/p/9585499.html
Copyright © 2011-2022 走看看