
package com.tang.project1.utils;
class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
public class LeetCode23 {
static class Solution {
public static ListNode mergeKLists(ListNode[] lists){
if (lists.length == 0) {
return null;
}
if (lists.length == 1) {
return lists[0];
}
if (lists.length == 2) {
return mergeTwoLists(lists[0],lists[1]);
}
int mid = lists.length/2;
ListNode[] sub1 = new ListNode[mid];
for (int i = 0; i < mid; i++) {
sub1[i] = lists[i];
}
ListNode[] sub2 = new ListNode[lists.length - mid];
for (int i = mid; i < lists.length; i++) {
sub2[i - mid] = lists[i];
}
ListNode l1 = mergeKLists(sub1);
ListNode l2 = mergeKLists(sub2);
return mergeTwoLists(l1,l2);
}
public static ListNode mergeTwoLists(ListNode list1, ListNode list2) {
ListNode dummy = new ListNode(-1);
ListNode pre = dummy;
while(list1 != null && list2 != null){
if(list1.val < list2.val){
pre.next = list1;
list1 = list1.next;
}else{
pre.next = list2;
list2 = list2.next;
}
pre = pre.next;
}
if(list1 != null){
pre.next = list1;
}
if(list2 != null){
pre.next = list2;
}
return dummy.next;
}
}
public static void main(String[] args) {
ListNode a = new ListNode(1);
ListNode b = new ListNode(4);
ListNode c = new ListNode(5);
a.next = b;
b.next = c;
ListNode m = new ListNode(1);
ListNode n = new ListNode(3);
ListNode p = new ListNode(4);
m.next = n;
n.next = p;
ListNode s = new ListNode(2);
ListNode t = new ListNode(6);
s.next = t;
ListNode[] lists = {a,m,s};
ListNode listNode = Solution.mergeKLists(lists);
while (listNode != null){
System.out.print(listNode.val + "-->");
listNode = listNode.next;
}
}
}