题目:合并K个已排序链表。
分析:合并两个sorted链表已经搞定,做K-1次就行了。
class Solution
{
public:
ListNode *mergeKLists(vector<ListNode *> &lists){
if(lists.size()==0)
return NULL;
ListNode *res=lists[0];
for(int i=1;i<lists.size();++i)//一共K-1次调用
res=mergeTwoLists(res,lists[i]);
return res;
}
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2)
{
ListNode head(-1);
ListNode *p=&head;//遇到头结点问题时,可以考虑虚拟一个头结点出来。
while(l1!=NULL || l2!=NULL)
{
int val1=l1==NULL?INT_MAX:l1->val;
int val2=l2==NULL?INT_MAX:l2->val;//直接搞,不用考虑哪个链表长,哪个链表短。
if(val1<val2)
{
p->next=l1;
l1=l1->next;
}
else
{
p->next=l2;
l2=l2->next;
}
p=p->next;
}
return head.next;
}
};