沫沫的进阶之路

记录点滴

[Leetcode] 23. Merge k Sorted Lists

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

思路:
一看到这个题目,开始的想法是依次将两个已有顺序链表的合并。但是这个方法,如果数组长度是n,合并次数就是n次,运行超时。
所以要减少链表之间的合并次数。
可以利用归并的思想。

具体代码如下:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode mergeKLists(ListNode[] lists) {
       if(lists == null && lists.length == 0){
            return null;
        }

        return merge(lists, 0, lists.length);
    }

    public ListNode merge(ListNode[] lists,int low, int high){
        int n = high - low;
        if(n < 1){
            return null;
        }
        if(n == 1){
            return lists[low];
        }
        int mid = low + n / 2;

        ListNode left = merge(lists,low, mid);
        ListNode right = merge(lists,mid, high);

        return MegerList(left,right);
    }

//  对两个已排序的链表进行合并
    public ListNode MegerList(ListNode head1,ListNode head2){
        ListNode phead = new ListNode(Integer.MIN_VALUE);
        ListNode p = phead;

        while(head1 != null && head2 != null){
            if(head1.val < head2.val){
                p.next = head1;
                head1 =head1.next;
            }
            else{
                p.next = head2;
                head2 =head2.next;
            }
            p = p.next;
        }

        if(head1 != null){
            p.next = head1;
        }
        if(head2 != null){
            p.next = head2;
        }

        return phead.next;
    }
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xinyuehuixin/article/details/51564423
文章标签: leetcode 链表 LinkList
个人分类: Leetcode
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

[Leetcode] 23. Merge k Sorted Lists

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭