欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 链表系列一>合并 k 个升序链表

链表系列一>合并 k 个升序链表

2025/5/6 3:52:50 来源:https://blog.csdn.net/robin_suli/article/details/147646579  浏览:    关键词:链表系列一>合并 k 个升序链表

目录

  • 题目:
  • 方法一解析:
  • 代码:
  • 方法二解析:
  • 代码:

题目:

链接: link这里是引用

方法一解析:

这里是引用

代码:

public ListNode mergeKLists(ListNode[] lists) {//建立小根堆PriorityQueue<ListNode> heap = new PriorityQueue<>((v1,v2)-> v1.val - v2.val);//把所有头节点放入小根堆中for(ListNode l : lists){if(l != null){heap.offer(l);}}ListNode ret = new ListNode(0);ListNode prev = ret;while(!heap.isEmpty()){ListNode t = heprev.next = t;prev.next = t;prev = t;if(t.next != null)heap.offer(t.next);}return ret.next;}

方法二解析:

这里是引用

代码:

//递归写法:public ListNode mergeKLists(ListNode[] lists) {return merge(lists,0,lists.length-1);}public ListNode merge(ListNode[] lists,int left, int right){if(left > right)return null;if(left == right)return lists[left];    //1.平分数组    int mid = (left + right) / 2;//[left,mid][mid+1,right]//2.递归处理ListNode l1 = merge(lists,left,mid);ListNode l2 = merge(lists,mid+1,right);//3.合并两个有序链表return megeToList(l1,l2);}private ListNode megeToList(ListNode l1, ListNode l2){if(l1 == null) return l2;if(l2 == null) return l1;ListNode ret = new ListNode(0);ListNode prev = ret;ListNode cur1 = l1, cur2 = l2;while(cur1 != null && cur2 != null){if(cur1.val < cur2.val){prev.next = cur1;prev = cur1;cur1 = cur1.next;}else{prev.next = cur2;prev = cur2;cur2 = cur2.next;}}if(cur1 != null) prev.next = cur1;if(cur2 != null) prev.next = cur2;return ret.next;} 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词