题解 | #合并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;
}

全部评论

相关推荐

码农索隆:以下是我以我微薄的认知提供的建议: 1.考个教师资格证,去当体育考试。 2.去健身房当健身教练(因为在我印象里面体育生身材都不错)。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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