# 原地址
https://leetcode-cn.com/problems/merge-k-sorted-lists/
# 原理
分治原理,由2个升序链表变为k个升序链表,把数组中的两两合并,然后放入新数组,进行递归
# 代码
```java
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
ListNode root=new ListNode(0);
if(lists.length==0){
return root.next;
}
if(lists.length==1){
return lists[0];
}
if(lists.length==2){
return merge(lists[0],lists[1]);
}
int len=lists.length/2 + lists.length%2;
ListNode[] newLists=new ListNode[len];
for(int i=0,j=0; i<lists.length; i=i+2,j++){
ListNode l3=null;
if(i+1<lists.length){
l3=merge(lists[i],lists[i+1]);
}else{a
l3=lists[i];
}
newLists[j]=l3;
}
return mergeKLists(newLists);
}
public ListNode merge(ListNode l1, ListNode l2){
ListNode root=new ListNode(0);
ListNode head=root;
while(l1!=null && l2!=null){
if(l1.val<l2.val){
head.next=l1;
head=head.next;
l1=l1.next;
}else{
head.next=l2;
head=head.next;
l2=l2.next;
}
}
if(l1==null){
head.next=l2;
}
if(l2==null){
head.next=l1;
}
return root.next;
}
}
```

23. 合并K个升序链表(链表)