zoukankan      html  css  js  c++  java
  • 23. 合并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) {
            if(lists == null || lists.length == 0){
                return null;
            }
            //每次合并两条
            int len = lists.length;
            while(len != 1){
                int i;
                for(i = 0;i < len / 2;i++){
                    lists[i] = merge2(lists[2 * i],lists[2 * i + 1]);
                }
                if(len % 2 == 1){
                    lists[i] = lists[len - 1];
                    len++;
                }
                len /= 2;
            }
            return lists[0];
        }
        private ListNode merge2(ListNode l1,ListNode l2){
            if(l1 == null && l2 == null) return null;
            ListNode dummy = new ListNode(-1);
            ListNode pre = dummy;
            while(l1 != null && l2 != null){
                if(l1.val < l2.val){
                    pre.next = l1;
                    l1 = l1.next;
                }else{
                    pre.next = l2;
                    l2 = l2.next;
                }
                //更新pre
                pre = pre.next;
            }
            pre.next = (l1 == null) ? l2 : l1;
            return dummy.next;
        }
    }
    一回生,二回熟
  • 相关阅读:
    第二章例2-11
    第二章例2-10
    例2-11
    例2-9+2-10
    例2-7+例2-8
    例2-5+2-6
    例2-4
    例2-3
    例2-2
    例2-1
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12660682.html
Copyright © 2011-2022 走看看