023 合并K个排序链表 腾讯精选50
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
思路:由于前两题做了两个链表的相加,可以用递归来求解(万物皆可递归)
在两链表相加,我们也用了递归,一次一次的递归,一次一次调用addLists函数
代码:
class Solution {
public static ListNode mergeKLists(ListNode[] lists) {
if (lists.length == 0) {
return null;
}
if (lists.length == 1) {
return lists[0];
}
if (lists.length == 2) {
return addLists(lists[0], lists[1]);
}
return addLists(lists[0], mergeKLists(Arrays.copyOfRange(lists, 1, lists.length)));
}
public static ListNode addLists(ListNode l1,ListNode l2){
if (l1 == null) {
return l2;
}
if (l2 == null) {
return l1;
}
if (l1.val < l2.val) {
l1.next = addLists(l1.next, l2);
return l1;
} else {
l2.next = addLists(l1, l2.next);
return l2;
}
}
}