leetcode-单链表-23

/**
<p>给你一个链表数组,每个链表都已经按升序排列。</p>

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

<p>&nbsp;</p>

<p><strong>示例 1:</strong></p>

<pre><strong>输入:</strong>lists = [[1,4,5],[1,3,4],[2,6]]
<strong>输出:</strong>[1,1,2,3,4,4,5,6]
<strong>解释:</strong>链表数组如下:
[
  1-&gt;4-&gt;5,
  1-&gt;3-&gt;4,
  2-&gt;6
]
将它们合并到一个有序链表中得到。
1-&gt;1-&gt;2-&gt;3-&gt;4-&gt;4-&gt;5-&gt;6
</pre>

<p><strong>示例 2:</strong></p>

<pre><strong>输入:</strong>lists = []
<strong>输出:</strong>[]
</pre>

<p><strong>示例 3:</strong></p>

<pre><strong>输入:</strong>lists = [[]]
<strong>输出:</strong>[]
</pre>

<p>&nbsp;</p>

<p><strong>提示:</strong></p>

<ul>
	<li><code>k == lists.length</code></li>
	<li><code>0 &lt;= k &lt;= 10^4</code></li>
	<li><code>0 &lt;= lists[i].length &lt;= 500</code></li>
	<li><code>-10^4 &lt;= lists[i][j] &lt;= 10^4</code></li>
	<li><code>lists[i]</code> 按 <strong>升序</strong> 排列</li>
	<li><code>lists[i].length</code> 的总和不超过 <code>10^4</code></li>
</ul>
<div><div>Related Topics</div><div><li>链表</li><li>分治</li><li>堆(优先队列)</li><li>归并排序</li></div></div><br><div><li>👍 1874</li><li>👎 0</li></div>
*/

//leetcode submit region begin(Prohibit modification and deletion)

import javax.xml.transform.Templates;
import java.util.PriorityQueue;

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeKLists(ListNode[] lists) {
		if(lists.length==0){
			return null;
		}

		PriorityQueue<ListNode> pq = new PriorityQueue<ListNode>(
				lists.length,(a,b)->(a.val - b.val)
		);

		ListNode dummy = new ListNode(-1);
		ListNode p = dummy;

		//通过优先级队列, 小根堆, 排序头节点
		for(ListNode head : lists){
			if(head != null){
				pq.add(head);
			}
		}

		while(!pq.isEmpty()){
			ListNode temp = pq.poll();
			p.next = temp;

			//每次排序完一个节点,然后放入这个节点的下一个节点
			if(temp.next!=null){
				pq.add(temp.next);
			}
			p = p.next;

		}
		return dummy.next;
    }
}
//leetcode submit region end(Prohibit modification and deletion)


posted @   小傻孩丶儿  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示