您的位置:首页 > 其它

LeetCode 23.Merge k Sorted List 合并k个有序链表(后补)

2018-02-26 16:46 465 查看
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

题目描述

讲k个有序链表合并为一个链表,并且保持有序状态。

思路1

将所有的链表的头结点放到最小堆里面,每提取一个结点,就将该结点的下一个结点放在堆里。

public class MergeKSortedList {
public ListNode mergeKLists(ArrayList<ListNode> lists) {
if ( lists.size()==0 || lists==null ) {
return null;
} else {
PriorityQueue<ListNode> que = new PriorityQueue<>( lists.size(),new Comparator<ListNode>() {
public int compare(ListNode o1, ListNode o2) {
return o1.val-o2.val;
}
});

ListIterator<ListNode> it = lists.listIterator();
while ( it.hasNext() ) {
ListNode temp = it.next();
if ( null!=temp ) {
que.add(temp);
}
}
ListNode root = que.poll();
// 有比较多的坑点
if ( root.next!=null ) {
que.add(root.next);
}
ListNode head = root;
while ( !que.isEmpty() ) {
ListNode t = que.poll();
if( t.next!=null ) {
que.add(t.next);
}
head.next = t;
head = head.next;
}
return root;
}
}
}


思路2

可以借鉴归并排序的思路,先将n个链表中一一合并为n/2个,再进行合并,一直合并到一个为止。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表 leetcode 堆栈