题目:合并k个排序列表,返回合并后的排序列表
示例:
输入:
1->4->5
1->3->4
2->6
输出:
1->1->2->3->4->4->5->6
题解(一):采用迭代法,设置一个累积链表,用于保存子链表依次合并后的结果。当累积链表内含所有子链表后,即得到合并结果
class solution
{
private:
public:
ListNode* Merge(vector<ListNode*>list)
{
ListNode* subMerge = new ListNode;
if (list.empty()) { return NULL; }
for (int i = 0;i < list.size() ;i++)
{
/*
*subResult用于临时保存当前两个链表的合并结果
*subMerge用于保存此前链表合并后的累积结果
*/
ListNode* subResult = new ListNode;
ListNode* subResultMid = subResult;
ListNode* subMergeMid = subMerge;
//第一个链表由于没有累积链表与之合并,所以直接让累积链表等于第一个链表
if (i == 0) { subMerge = list[i];continue; }
//链表合并的迭代法
while (list[i] != NULL && subMergeMid != NULL)
{
if (subMergeMid->val <= list[i]->val)
{
subResultMid->next = subMergeMid;
subMergeMid = subMergeMid->next;
}
else
{
subResultMid->next = list[i];
list[i] = list[i]->next;
}
subResultMid = subResultMid->next;
}
subResultMid->next = list[i] == NULL ? subMergeMid : list[i];
subMerge = subResult->next;
}
//合并完成后,返回累积结果
return subMerge;
}
};