leetcode23 合并K个排序链表--有序链表的合并问题

leetcode23 合并K个排序链表–有序链表的合并问题
题目描述:
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

示例:

输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
题目分析:
首先写一个将两个有序链表合并为一个链表的函数,使用此函数将lists中的所有链表依次合并到第一个链表当中。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        //思想:先写出合并两个链表的函数,然后不断合并已经合并的新链表和下一个list

        if(lists.size()==0){return NULL;}
        ListNode *res=lists[0];
        for(int i=1;i<lists.size();i++)
        {
            res=merge2List(res,lists[i]);
        }
        return res;


    }
    ListNode *merge2List(ListNode *l1,ListNode *l2){
        if(l1==NULL&&l2!=NULL)return l2;
        if(l2==NULL&&l1!=NULL)return l1;
        else{
            ListNode *ahead=new ListNode(0);
            ListNode *p=ahead;
            while(l1&&l2)
            {
                if(l1->val<l2->val)
                {
                    p->next=l1;
                    l1=l1->next;
                }
                else{ 
                    p->next=l2;
                    l2=l2->next;
                }
                p=p->next;
            }
            if(l1==NULL){p->next=l2;}
            if(l2==NULL){p->next=l1;}
            return ahead->next;

        }

    }
};v

猜你喜欢

转载自blog.csdn.net/honry55/article/details/82287089