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

合并k个已排序的链表

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

struct ListNode* merge(struct ListNode* head1, struct ListNode* head2) {
    struct ListNode *p = head1;
    struct ListNode *q = head2;
    if(p == NULL){
        return q;
    }else if(q == NULL){
        return p;
    }else if(p->val < q->val){
        p->next = merge(p->next, q);
        return p;
    }else{
        q->next = merge(p, q->next);
        return q;
    }
}
struct ListNode* toSortList(struct ListNode* head, struct ListNode* tail) {
    if (head == NULL) {
        return head;
    }
    if (head->next == tail) {
        head->next = NULL;
        return head;
    }
    struct ListNode *slow = head, *fast = head;
    while (fast != tail) {
        slow = slow->next;
        fast = fast->next;
        if (fast != tail) {
            fast = fast->next;
        }
    }
    struct ListNode* mid = slow;
    return merge(toSortList(head, mid), toSortList(mid, tail));
}
struct ListNode* mergeKLists(struct ListNode** lists, int listsLen ) {
    if(listsLen == 0) return NULL;
    struct ListNode *dummy = (struct ListNode*)malloc(sizeof(struct ListNode));
    dummy->val = 0;//初始化
    struct ListNode *pr = dummy;
    for(int i = 0; i < listsLen; i++){
        pr->next = lists[i];
        while(pr->next !=  NULL){
            pr = pr->next;  
        }
    }
    //排序
    return toSortList(dummy->next, NULL);
}

全部评论

相关推荐

湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
06-12 16:00
天津大学 Java
牛客30236098...:腾讯坏事做尽,终面挂是最破防的 上次被挂了后我连简历都不刷了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务