题解 | #合并k个已排序的链表#

合并k个已排序的链表

https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6

C语言实现,基本思路,归并排序法

struct ListNode* sort(struct ListNode* l, struct ListNode* r)
{
    struct ListNode head = {0};
    struct ListNode* cur = &head;
    
    while (l != NULL && r != NULL) {
        if (l->val <= r->val) {
            cur->next = l;
            cur = cur->next;
            l = l->next;
        } else {
            cur->next = r;
            cur = cur->next;
            r = r->next;
        }
    }
    if (l != NULL) {
        cur->next = l;
    }
    if (r != NULL) {
        cur->next = r;
    }
    
    return head.next;
}

struct ListNode* mergesort(struct ListNode** lists, int left, int right)
{
    int mid = 0;
    struct ListNode *l = NULL, *r = NULL;
    if (left < right) {
        mid = (left + right) / 2;
        
        l = mergesort(lists, left, mid);
        
        r = mergesort(lists, mid + 1, right);
        
        return sort(l, r);
    } else {
        return lists[left];
    }
}

struct ListNode* mergeKLists(struct ListNode** lists, int listsLen ) {

    return mergesort(lists, 0, listsLen - 1);

}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务