正好之前有合并两个排序链表,首先想到就是一条一条合并,但是这样多一条链表就相当于多了n次合并,可以两两合并然后再将所有的链表合并,将链表一分为二,相互两两合并直至只有一条链表。我采取的顺序是0+n/2,1+n/2+1......这样合并最终数组的第一个链表即为所求
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
int l = lists.length;
if(l==0){
return null;
}
while(l>1){
int temp = l/2;
if(l%2==1){
l = l/2+1;
}else{
l = l/2;
}
for(int i=0;i<temp;i++){
lists[i] = mergeTwoLists(lists[i],lists[l+i]);
}
}
return lists[0];
}
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode listNode = new ListNode(0);
ListNode firstNode = listNode;
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;
}
while (l1 != null) {
listNode.next = l1;
l1 = l1.next;
listNode = listNode.next;
}
while (l2 != null) {
listNode.next = l2;
l2 = l2.next;
listNode = listNode.next;
}
return firstNode.next;
}
}