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

合并k个已排序的链表

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

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param lists ListNode类一维数组 
 * @param listsLen int lists数组长度
 * @return ListNode类
 */
struct ListNode* mergeKLists(struct ListNode** lists, int listsLen ) {
    // write code here
    struct ListNode *listarr[5000];
    int fifo[listsLen];
    int i;
    struct ListNode *head = NULL;
    int idx = 0;
    int min;
    int min_index;
    struct ListNode *curr = NULL;
    memset(listarr, 0, sizeof(struct ListNode *) * 5000);
    for (i = 0; i < listsLen; i++)
        fifo[i] = 1001;
again:
    min_index = -1;
    min = 1001;
    for(i = 0; i < listsLen; i++) {
        curr = lists[i];
        if (fifo[i] == 1001)
            fifo[i] = (curr != NULL) ? curr->val : 1001;
        if (fifo[i] < min) {
            min_index = i;
            min = fifo[i];
        }
    }
    if (min_index == -1)
        goto out;
    listarr[idx++] = lists[min_index];
    lists[min_index] = lists[min_index]->next;
    fifo[min_index] = (lists[min_index] == NULL) ? 1001 : lists[min_index]->val;
    goto again;
out:
    if (idx == 0)
        return NULL;
    head = listarr[0];
    for (i = 0; i < idx; i++) {
        listarr[i]->next = (i == idx - 1) ? NULL : listarr[i + 1];
    }
    return head;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-29 17:30
找实习找着找着就要进入7月了,马上秋招也要开始了,找实习还有意义吗?
绝迹的星:有面就面, 没面上就当日薪4位数大佬免费培训, 面上了再考虑要不要实习
点赞 评论 收藏
分享
07-02 18:09
门头沟学院 Java
苍穹外卖和谷粒商城这俩是不是烂大街了,还能做吗?
想去重庆的鸽子在吐槽:你不如把这俩做完自己搞明白再优化点再来问 何必贩卖焦虑
点赞 评论 收藏
分享
06-07 12:20
新余学院 Java
点赞 评论 收藏
分享
流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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