leetcode23 合并K个排序链表
【摘要】
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1->2->3->4->4->5->6
思路:把...
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
思路:把初始的每一个链表当成数组中的一个数,做数组的归并排序。
递归的merge过程就是稍微慢一点,因为来回跳函数栈,所以你们看到只击败了90.
-
/**
-
* Definition for singly-linked list.
-
* public class ListNode {
-
* int val;
-
* ListNode next;
-
* ListNode(int x) { val = x; }
-
* }
-
*/
-
class Solution {
-
public ListNode mergeKLists(ListNode[] lists) {
-
if(lists.length == 0) return null;
-
return solve(lists, 0, lists.length-1);
-
}
-
-
private ListNode solve(ListNode[] arr, int left, int right){
-
if(left == right) return arr[left];
-
-
int mid = (left + right) >> 1;
-
ListNode lNode = solve(arr, left, mid);
-
ListNode rNode = solve(arr, mid+1, right);
-
-
return merge(lNode, rNode);
-
}
-
-
private ListNode merge(ListNode node1, ListNode node2){
-
if(node1 == null) return node2;
-
if(node2 == null) return node1;
-
-
if(node1.val < node2.val){
-
node1.next = merge(node1.next, node2);
-
return node1;
-
}else{
-
node2.next = merge(node1, node2.next);
-
return node2;
-
}
-
}
-
}
文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。
原文链接:fantianzuo.blog.csdn.net/article/details/103393998
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)