leetcode 合并k个排序链表

合并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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值