首页 > 编程语言 > 详细

23. Merge K Sorted Lists (Java, 归并排序的思路)

时间:2016-08-13 22:31:28      阅读:303      评论:0      收藏:0      [点我收藏+]

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

解析:合并k个已经有序的单链表,使其最终成为一个有序的单链表。原理就是归并排序,递归运算。基本算法recusion 与 merge

编码:

public ListNode mergeKLists(ListNode[] lists) {
        if(lists == null || lists.length == 0)
           return null;
        if(lists.length == 1)
           return lists[0];
        return recursion(lists,0,lists.length - 1);
    }
    //recursion
    public ListNode recursion(ListNode[] lists,int start,int end){
        if(start == end)//只有一个链表
           return lists[start];
        if(start < end){
            int mid = start + (end - start) / 2; //注意:这里防止整数越界的处理,start+(start+end)/2
            ListNode l1 = recursion(lists,start,mid);
            ListNode l2 = recursion(lists,mid + 1,end);
            return merge(l1,l2);
        } else
            return null;
        
    }
    //merge
    public ListNode merge(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的下一个节点是第一个数据结点
    }

 

23. Merge K Sorted Lists (Java, 归并排序的思路)

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

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