美文网首页
23合并K个排序链表

23合并K个排序链表

作者: su945 | 来源:发表于2020-06-25 21:43 被阅读0次

    题目描述

    合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

    示例:

    输入:
    [
    1->4->5,
    1->3->4,
    2->6
    ]
    输出: 1->1->2->3->4->4->5->6

    问题分析

    将问题分解为两步

    • 如何合并两个排序链表
    • 逐次合并,直到合并K个

    解题思路1

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        //先合并两个排序的链表
        ListNode* mergeTwoLists(ListNode* list1, ListNode*list2)
        {
            if (!list1 || !list2)
            {
                return list1 ? list1 : list2;
            }
            ListNode* head = new ListNode(0), *tail = head, *aPtr = list1, *bPtr = list2;
            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;
            for (int i = 0; i < lists.size(); ++i)
            {
                ans = mergeTwoLists(ans, lists[i]);
            }
            return ans;
        }
    };
    

    相关文章

      网友评论

          本文标题:23合并K个排序链表

          本文链接:https://www.haomeiwen.com/subject/qtsefktx.html