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


查看12道真题和解析