欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 力扣——合并K个排序链表

力扣——合并K个排序链表

2025/3/15 19:15:36 来源:https://blog.csdn.net/weixin_49332521/article/details/146267794  浏览:    关键词:力扣——合并K个排序链表

题目链接:

链接

题目描述:

在这里插入图片描述

思路:

同步合并

已知顺序排列,每个链表的node比较再加进结果,用优先队列方便比较node,可以先把每个链表的头结点加进队列,然后队列头出,出来的头还有next,就加进去,这样确保每个链表都有节点放进队列里面了

两两合并

两两合并链表,逐个击破

实现代码:

class Solution {public ListNode mergeKLists(ListNode[] lists) {if(lists == null || lists.length == 0){return null;}PriorityQueue<ListNode> q = new PriorityQueue<>((a, b) -> a.val - b.val);;for(ListNode node : lists){if (node != null) {q.offer(node);}}ListNode dummy = new ListNode(0);ListNode cur = dummy;while(!q.isEmpty()){cur.next = q.poll();cur = cur.next;    if(cur.next != null){q.offer(cur.next);}}return dummy.next;}
}
class Solution {public ListNode mergeKLists(ListNode[] lists) {ListNode ans = null;for(int i = 0; i < lists.length ; i++){ans = merge(ans,lists[i]);}return ans;}public ListNode merge(ListNode a, ListNode b){if(a == null || b== null){return a != null ? a:b;}ListNode head = new ListNode(0);ListNode cur = head, p1 = a, p2 = b;while(p1 != null && p2 != null){if(p1.val < p2.val){cur.next = p1;p1 = p1.next;}else{cur.next = p2;p2 = p2.next;}cur = cur.next;}cur.next = p1 != null ? p1 : p2;return head.next;}
}

版权声明:

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

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

热搜词