题目描述
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
代码
利用合并两个有序链表的方法,采用两两合并的方式。
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode MergeKLists(ListNode[] lists) {
if(lists.Count()==0)
return null;
for(int i=0; i<lists.Count()-1;i++)
{
lists[i+1] = MergeTwoLists(lists[i], lists[i+1]);
}
return lists[lists.Count()-1];
}
public ListNode MergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null) {
return l2;
}
else if (l2 == null) {
return l1;
}
else if (l1.val < l2.val) {
l1.next = MergeTwoLists(l1.next, l2);
return l1;
}
else {
l2.next = MergeTwoLists(l1, l2.next);
return l2;
}
}
}