0
点赞
收藏
分享

微信扫一扫

23. 合并K个升序链表

Python百事通 2022-03-15 阅读 49

力扣icon-default.png?t=M276https://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;
    }
}
举报

相关推荐

0 条评论