力扣https://leetcode-cn.com/problems/merge-k-sorted-lists/submissions/
//递归
public class Solution {
public ListNode MergeKLists(ListNode[] lists) {
//特殊情况处理
if(lists==null||lists.Length==0) return null;
if(lists.Length==1) return lists[0];
if(lists.Length==2) return MergeTwoLists(lists[0],lists[1]);
return PartionMerge(lists,0,lists.Length-1);
}
public ListNode PartionMerge(ListNode[] lists,int left,int right){
//递归终止条件
if(left>right) return null;
if(left==right) return lists[left];
//int mid=left+(right-left)/2;
int mid=(left+right)>>1;
ListNode l1=PartionMerge(lists,left,mid);
ListNode l2=PartionMerge(lists,mid+1,right);
return MergeTwoLists(l1,l2);
}
//合并两个有序链表
public ListNode MergeTwoLists(ListNode list1, ListNode list2) {
var vhead=new ListNode(-1);
var cur=vhead;
while(list1!=null&&list2!=null){
if(list1.val<list2.val){
cur.next=list1;
list1=list1.next;
cur=cur.next;
}else{
cur.next=list2;
list2=list2.next;
cur=cur.next;
}
}
if(list1==null) cur.next=list2;
if(list2==null) cur.next=list1;
return vhead.next;
}
}