题目描述
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
题解
前两天写过合并两个有序链表链接: 【leetcode】21. 合并两个有序链表.
合并K个有序链表利用归并的思想,递归到只剩下两个,然后从下至上两个两个合并。
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if (lists.length == 0) return null;
ListNode res = merge(lists, 0, lists.length - 1);
return res;
}
public ListNode merge(ListNode[] lists, int left, int right){
if (left == right) return lists[left];
int mid = (left + right) / 2;
ListNode l = merge(lists, left, mid);
ListNode r = merge(lists, mid + 1, right);
return merge2Lists(l, r);
}
public ListNode merge2Lists(ListNode l, ListNode r){
if (l == null) return r;
if (r == null) return l;
if (l.val < r.val){
l.next = merge2Lists(l.next, r);
return l;
}else{
r.next = merge2Lists(l, r.next);
return r;
}
}
}