题目:
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出:
1->1->2->3->4->4->5->6
题解:
参考这题21. 合并两个有序链表。
①:将k个排序链表两两排序,排k-1次后最终结果就是合并后结果,时间复杂度: O(kN),其中 k 是链表的数目,总共有 N个节点在最后的链表中。空间复杂度:O(1)。代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
int n=lists.length;
if(n==0||lists==null) return null;
for(int i=0;i<n-1;i++){
lists[i+1]=mergeTwoLists(lists[i],lists[i+1]);
}
return lists[n-1];
}
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1==null) return l2;
if(l2==null) return l1;
ListNode l1_temp=new ListNode(0);
ListNode l2_temp=new ListNode(0);
ListNode result=new ListNode(0);
l1_temp=l1;
l2_temp=l2;
while(true){
if