首页 > 编程语言 > 详细

Merge K Sorted List(含Merge Two Sorted LIst) leetcode java

时间:2015-12-14 14:16:20      阅读:175      评论:0      收藏:0      [点我收藏+]

问题描述:

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

分析:基于二分法,将k个list分为两部分,这两部分再次分别进行二分法,合并

算法:

public ListNode mergeKLists(ListNode[] lists) { //k个sorted list合并为一个sorted list
        if(lists == null || lists.length == 0)
            return null;
        int len = lists.length; 
        if(len == 1)
            return lists[0];
        int mid = len / 2;
        ListNode[] list1 = new ListNode[mid] ;
        ListNode[] list2 = new ListNode[len - mid] ;
        for(int i = 0 ;i < mid ; i++)
            list1[i] = lists[i];
        for(int j = mid ;j < len;j++)
            list2[j - mid] = lists[j];
        ListNode l1 = mergeKLists(list1); //递归
        ListNode l2 = mergeKLists(list2);
        
        return mergeTwoSortedList_1(l1,l2); //合并
    }
    //两个链表链接
    public static ListNode mergeTwoSortedList_1(ListNode l1,ListNode l2){
        
        ListNode head = new ListNode(0); //创建一个头结点,最后还要删掉
        ListNode p = head;
        while(l1 != null && l2 != null){
            if(l1.val <= l2.val){
                p.next = l1;
                l1 = l1.next;
            } else{
                p.next = l2;
                l2 = l2.next;
            }
            p = p.next;
        }
        
        p.next = (l1 != null) ? l1 : l2;
        return head.next;// head的下一个节点是第一个数据结点
    }

 

Merge K Sorted List(含Merge Two Sorted LIst) leetcode java

原文:http://www.cnblogs.com/mydesky2012/p/5045036.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!