题目描述:
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
示例 1:
输入:lists = [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组如下: [ 1->4->5, 1->3->4, 2->6 ] 将它们合并到一个有序链表中得到。 1->1->2->3->4->4->5->6
示例 2:
输入:lists = [] 输出:[]
示例 3:
输入:lists = [[]] 输出:[]
代码:
public ListNode mergeKLists(ListNode[] lists) {
if(lists.length==0)
return null;
return split(lists,0,lists.length-1);
}
private ListNode split(ListNode[] lists,int i,int j){//返回合并后的链表,i,j代表左右边界
if(i==j)//数组只有一个链表
return lists[i];
else{
int mid=(i+j)>>>1;
ListNode left=split(lists,i,mid);
ListNode right=split(lists,mid+1,j);
return mergeTwoLists1(left,right);
}
}
public ListNode mergeTwoLists1(ListNode p1, ListNode p2) {
ListNode s=new ListNode(-1, null);
ListNode p=s;
while(p1!=null&&p2!=null){
if(p1.value<=p2.value)
{
p.next=p1;
p1=p1.next;
}else{
p.next=p2;
p2=p2.next;
}
p=p.next;
}
if(p1!=null){
p.next=p1;
}else{
p.next=p2;
}
return s.next;
}