待优化
方法一:利用leetcode21中的合并两个链表
遍历list中的链表,依次将当前链表与下一个链表进行合并,调用leetcode21中的链表合并函数
这里需要注意的是 虚拟头节点中的元素要初始化为最小值,防止list中存在空链表,从而是虚拟头结点的值影响。
如下图,比如将虚拟头结点中数值初始化为-1,那么-3 -2 等因为小于-1 而被遗弃
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
ListNode *p = new ListNode(-pow(10,4));
int size = lists.size();
if(size==0) return p->next;
else
{
ListNode *q = p;
p->next=lists[0];
for(int i = 0; i < size-1; i++)
{
p = mergeTwoLists(p,lists[i+1]);
}
return q->next;
}
}
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode * virtureHead = new ListNode(-1);
ListNode * a = virtureHead;
while(l1&&l2)
{
virtureHead->next = (l1->val<=l2->val)? l1:l2;
virtureHead=virtureHead->next;
if(l1->val<=l2->val) l1=l1->next;
else l2=l2->next;
}
virtureHead->next=l1? l1:l2;//如果某个为空,直接将不为空的剩余部分链表作为新链表的尾部
return a->next;
}
};