题目:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
解题思路:
利用一个优先队列实现程序的模拟,优先队列根据ListNode的val值大小进行排序。
代码:
public ListNode mergeKLists(ArrayList<ListNode> lists) {
if (lists == null || lists.size() == 0)
return null;
PriorityQueue<ListNode> pq = new PriorityQueue<ListNode>(lists.size(), new Comparator<ListNode>() {//优队列的大小为待比较的链表数目
@Override
public int compare(ListNode listNode1, ListNode listNode2) {
return listNode1.val - listNode2.val;
}
});
for (ListNode listNode : lists) {
if (listNode != null)
pq.add(listNode);
}
ListNode res = new ListNode(0);
ListNode ptr = res;
while (!pq.isEmpty()) {
ListNode listNode = pq.poll();
if (listNode.next != null)
pq.add(listNode.next);
ptr.next = listNode;
ptr = ptr.next;
}
return res.next;
}
参考链接:
http://blog.sina.com.cn/leetcode