leetcode23 合并K个排序链表

举报
兔老大 发表于 2021/04/19 23:04:44 2021/04/19
【摘要】 合并 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.


  
  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode(int x) { val = x; }
  7. * }
  8. */
  9. class Solution {
  10. public ListNode mergeKLists(ListNode[] lists) {
  11. if(lists.length == 0) return null;
  12. return solve(lists, 0, lists.length-1);
  13. }
  14. private ListNode solve(ListNode[] arr, int left, int right){
  15. if(left == right) return arr[left];
  16. int mid = (left + right) >> 1;
  17. ListNode lNode = solve(arr, left, mid);
  18. ListNode rNode = solve(arr, mid+1, right);
  19. return merge(lNode, rNode);
  20. }
  21. private ListNode merge(ListNode node1, ListNode node2){
  22. if(node1 == null) return node2;
  23. if(node2 == null) return node1;
  24. if(node1.val < node2.val){
  25. node1.next = merge(node1.next, node2);
  26. return node1;
  27. }else{
  28. node2.next = merge(node1, node2.next);
  29. return node2;
  30. }
  31. }
  32. }

 

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/103393998

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。