合并k个排序链表使之成为一个有序链表。
struct ListNode
{
int val;
ListNode* next;
ListNode(int x):val(x),next(NULL){}
};
class Solution
{
public:
ListNode* nergeTwoLists(ListNode* a,ListNode* b)
{
//合并两个链表
if((!a) || (!b)) return a ? a : b;
ListNode head;//虚拟头节点,保存合并后的头节点
ListNode *tail=&head;//新结点的前一个节点
ListNode *aPtr=a;//指向a的指针
ListNode *bPtr=b;//指向b的指针
while(aPtr && bPtr)
{
if(aPtr->val < bPtr->val)
{
tail->next=aPtr;
aPtr=aPtr->next;
}
else
{
tail->next=bPtr;
bPtr=bPtr->next;
}
tail=tail->next;
}
tail->next=(aPtr ? aPtr : bPtr);
return head.next;
}
ListNode* mergeKLists(vector<ListNode*>& lists)
{
ListNode* ans=nullptr;
int k=lists.size();
for(int i=0;i<k;i++)
{
ans=mergeTwoLists(ans,lists[i]);
}
return ans;
}
};