合并k个有序的链表
package test;
/**
* Created by JasonHe on 2018/8/15.
* leetcode.Merge k Sorted Lists Java版本(合并k个有序的链表)
*/
public class Test {
static ListNode mergeSort(ListNode l1,ListNode l2){
ListNode listNode = null;
ListNode begin = null;
if(l1 != null && l2 != null){
if(l1.val>l2.val){
listNode = l2;
begin = l2;
l2 = l2.next;
listNode.next = null;
}else{
listNode = l1;
begin = l1;
l1 = l1.next;
listNode.next = null;
}
}
// System.out.println("begin:"+begin.val+"==l2:"+l2.val);
while(l1 != null && l2 != null){
if(l1.val < l2.val){
listNode.next = l1;
l1 = l1.next;
}else{
listNode.next = l2;
l2 = l2.next;
}
listNode = listNode.next;
listNode.next = null;
}
if(l1 != null){
listNode.next= l1;
}
if(l2 != null){
listNode.next= l2;
}
return begin;
}
static ListNode mSort(int low,int high,ListNode[] lists){
int mid = (low + high) / 2;
if(low < high){
ListNode leftNode = mSort(low,mid,lists);
ListNode rightNode = mSort(mid+1,high,lists);
return mergeSort(leftNode,rightNode);
}
return lists[low];
}
public static void main(String[] args) {
ListNode[] lists = new ListNode[4];
lists[0] = new ListNode(new int[]{1,2,3,4,10});
/*while(beginNode1 != null){
System.out.print(beginNode1.val+",");
beginNode1 = beginNode1.next;
}*/
lists[1] = new ListNode(new int[]{6,11,12,13,14,15});
lists[2] = new ListNode(new int[]{0,5});
lists[3] = new ListNode(new int[]{7,8});
/*while(beginNode2 != null){
System.out.print("===="+beginNode2.val+",");
beginNode2 = beginNode2.next;
}*/
/*ListNode listNode = mergeSort(beginNode1,beginNode2);
while(listNode != null){
System.out.print(listNode.val+",");
listNode = listNode.next;
}*/
ListNode listNode = mSort(0,lists.length-1,lists);
while(listNode != null){
System.out.print(""+listNode.val+",");
listNode = listNode.next;
}
}
}