题意:给出一个有序单链表数组,将其合并成一个有序单链表
思路:将其转化成两个单链表合并的问题,用递归方式来实现
代码如下:
public class Solution
{
private ListNode mergeTwo(ListNode l1, ListNode l2)
{
if (null == l1) return l2;
if (null == l2) return l1;
if (l1 == l2) return l1;
if (l1.val < l2.val)
{
l1.next = mergeTwo(l1.next, l2);
return l1;
}
else
{
l2.next = mergeTwo(l1, l2.next);
return l2;
}
}
private ListNode reMerge(ListNode[] lists, int left, int right)
{
if (right - left < 2)
{
return mergeTwo(lists[left], lists[right]);
}
else
{
int mid = (left + right) >> 1;
return mergeTwo(reMerge(lists, left, mid), reMerge(lists, mid + 1, right));
}
}
public ListNode mergeKLists(ListNode[] lists)
{
if (null == lists || 0 == lists.length) return null;
return reMerge(lists, 0, lists.length - 1);
}
}