- 题目描述
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
来源:LeetCode
- 示例
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
- 思路分析
比较简单的想法是将k个链表的排序问题转换为1v1的问题,将前两个链表排序后,变成一个链表,再和第三个链表排序,又变成一个链表,以此类推。
- JAVA实现
public class MergeKLists {
public static ListNode mergeKLists(ListNode[] lists) {
ListNode merged = new ListNode(Integer.MIN_VALUE);
ListNode move = merged.next; //用于移动比较
ListNode saveHead = merged; //保存头节点
int number = lists.length, i = 0;
while(i < number) { //对list[i] & merged进行比较排序
while(move != null && lists[i] != null) {
if(move.val <= lists[i].val) {
merged.next = move;
move = move.next;
}
else {
merged.next = lists[i];
lists[i] = lists[i].next;
}
merged = merged.next;
}
if(move == null && lists[i] != null) merged.next = lists[i];
else if(move != null && lists[i] == null) merged.next = move;
move = saveHead.next;
merged = saveHead;
i++;
}
return saveHead.next;
}
}