LeetCode算法第23题:合并K个排序链表

问题描述:

合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

示例:

输入:

[

1->4->5,

1->3->4,

2->6

]

输出: 1->1->2->3->4->4->5->6

思路:

这道题可以使用分治的思想,使用二分法将ListNode数组拆开,分别合并,然后将合并后的ListNode对象再次合并,这一块就和之前做过的合并两个ListNode数组对象为一个,也就最终返回值。

java实现:

public ListNode mergeKLists(ListNode[] lists) {
if(null == lists || lists.length == 0) return null;
return solve(lists,0,lists.length - 1);
}

private ListNode solve(ListNode[] lists,int start,int end){
if(start >= end){
return lists[start];
}
int mid = (start + end) / 2;
ListNode left = solve(lists,start,mid);
ListNode right = solve(lists,mid + 1,end);

return merge(left,right);

}

private ListNode merge(ListNode left,ListNode right){
if(null == left) return right;
if(null == right) return left;

if(left.val > right.val){
right.next = merge(left,right.next);
return right;
}else{
left.next = merge(left.next,right);
return left;
}
}
发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();