Leetcode刷题100天—23. 合并K个升序链表(优先队列)—day18

亦凉 2022-09-11 03:18 243阅读 0赞

前言:

作者:神的孩子在歌唱

大家好,我叫运智

image-20210825213726626

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

示例 1:

  1. 输入:lists = [[1,4,5],[1,3,4],[2,6]]
  2. 输出:[1,1,2,3,4,4,5,6]
  3. 解释:链表数组如下:
  4. [
  5. 1->4->5,
  6. 1->3->4,
  7. 2->6
  8. ]
  9. 将它们合并到一个有序链表中得到。
  10. 1->1->2->3->4->4->5->6

示例 2:

  1. 输入:lists = []
  2. 输出:[]

示例 3:

  1. 输入:lists = [[]]
  2. 输出:[]

提示:

  • k == lists.length
  • 0 <= k <= 10^4
  • 0 <= lists[i].length <= 500
  • -10^4 <= lists[i][j] <= 10^4
  • lists[i] 按 升序 排列
  • lists[i].length 的总和不超过 10^4

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-k-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  1. package 优先队列;
  2. import java.util.PriorityQueue;
  3. /* * https://leetcode-cn.com/problems/merge-k-sorted-lists/ */
  4. public class _23_合并K个升序链表 {
  5. public ListNode mergeKLists(ListNode[] lists) {
  6. // 新建一个链表
  7. ListNode head=new ListNode(0,null);
  8. // 建立指针
  9. ListNode node=head;
  10. // 创建队列
  11. PriorityQueue<Integer> queue =new PriorityQueue<>();
  12. // for循环取出数组中的队列,在通过while循环取出链表中的值存入队列中
  13. for(ListNode list:lists) {
  14. while(list!=null) {
  15. queue.offer(list.val);
  16. // 使用指针连接后面的list,最后就连接好了head
  17. node.next=list;
  18. node=node.next;
  19. list=list.next;
  20. }
  21. }
  22. // 重新设置指针
  23. ListNode node1=head.next;
  24. // 在通过循环取出队列中的值修改链表中的值
  25. while(!queue.isEmpty()) {
  26. int num=queue.poll();
  27. System.out.print(num);
  28. node1.val=num;
  29. node1=node1.next;
  30. }
  31. return head.next;
  32. }
  33. }

本人csdn博客:https://blog.csdn.net/weixin\_46654114

转载说明:跟我说明,务必注明来源,附带本人博客连接。

发表评论

表情:
评论列表 (有 0 条评论,243人围观)

还没有评论,来说两句吧...

相关阅读

    相关 23. 合并K升序

    23. 合并K个升序链表 解题思路 代码 解题思路 其实最开始的思路是N个指针,每次放最小的进新链表,但是这样时间复杂度太高了!合并两个有序链表可以考