关闭

[Leetcode] 23. Merge k Sorted Lists

标签: leetcode链表LinkList
136人阅读 评论(0) 收藏 举报
分类:

题目:
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;
    }
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6768次
    • 积分:662
    • 等级:
    • 排名:千里之外
    • 原创:63篇
    • 转载:1篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论