

执行结果:通过
显示详情
执行用时 :612 ms, 在所有 C++ 提交中击败了10.07%的用户
内存消耗 :11.2 MB, 在所有 C++ 提交中击败了82.71%的用户
原理:每个链表的首个进行比较,将k个head节点比较,选择最小的输入新链表中,并将改行的head节点后移一个,重新比较,如果第j行到尾节点后。循环判断添加一个第j行是否head节点为null。如果为null就跳过比较该节点的head,否则需要比较。
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists)
{
ListNode* ans = new ListNode(-1);
ListNode* A = ans;
int ki = -1;
while(1)
{
int nums = INT_MAX;
ListNode* ADD = new ListNode(-1);
for(int i = 0; i < lists.size(); i++)
{
if(lists[i])
{
if(nums >= lists.at(i)->val)
{
nums = lists.at(i)->val;
ki = i;
}
}
}
if(nums != INT_MAX)
{
A->next = lists.at(ki);
if(lists.at(ki)->next)
{
lists.at(ki) = lists.at(ki)->next;
}
else
{
lists.at(ki)->next = NULL;
lists.at(ki) = lists.at(ki)->next;
}
A = A->next;
}
else
{
return ans->next;
}
}
return ans->next;
}
};
本文介绍了一种使用C++实现的链表合并算法,该算法可以将多个已排序的链表合并成一个有序链表。通过遍历比较每个链表的头部节点,选取最小值并将其添加到新链表中,然后移动该链表的头部节点进行下一轮比较,直至所有链表被完全合并。
908

被折叠的 条评论
为什么被折叠?



