题目链接 Leetcode 23
之前写归并排序都是在数组层面上进行操作,这一题是在单链表层面实现归并排序,要理解归并排序的基础原理就不难。
注意:特殊情况 空链表 空数组 等
public class Solution {
public ListNode mergeKLists(ListNode[] lists) {
int len = lists.length;
if(len==0) return null;
ListNode s = merge(lists,0,len-1);
return s;
}
public static ListNode merge2node(ListNode a, ListNode b){
ListNode s = new ListNode(0);
ListNode p = s;
while(a!=null && b!=null){
if(a.val<b.val){
s.next = a;
s=s.next;
a = a.next;
}else{
s.next = b;
s=s.next;
b=b.next;
}
}
if(a!=null){
s.next = a;
s=s.next;
a=a.next;
}
if(b!=null){
s.next = b;
s=s.next;
b=b.next;
}
return p.next;
}
public static ListNode merge(ListNode[] lists,int i,int j){
ListNode s;
if(i<j){
int mid = (i+j)/2;
ListNode a = merge(lists,i,mid);
ListNode b = merge(lists,mid+1,j);
s = merge2node(a,b);
}else{
s = lists[i];
}
return s;
}
}