C++ 链表归并算法:将两个递增有序链表合并为一个递减有序链表

算法思路:

  1. 创建一个新的链表C,作为归并后的结果链表。
  2. 分别遍历链表A和B,比较节点的值大小,并将较小的节点添加到链表C的头部。
  3. 当其中一个链表遍历完毕后,将另一个链表剩余的节点依次添加到链表C的头部。
  4. 返回链表C作为归并后的结果。

具体实现如下:

// 定义链表节点结构
struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(nullptr) {}
};

ListNode* mergeLists(ListNode* A, ListNode* B) {
    // 创建结果链表C
    ListNode* C = nullptr;
    ListNode* tail = nullptr;

    while (A != nullptr && B != nullptr) {
        // 比较节点的值大小
        if (A->val <= B->val) {
            // 将A的节点添加到C的头部
            ListNode* temp = A;
            A = A->next;
            temp->next = C;
            C = temp;
        } else {
            // 将B的节点添加到C的头部
            ListNode* temp = B;
            B = B->next;
            temp->next = C;
            C = temp;
        }   
    }

    // 将剩余节点添加到C的头部
    while (A != nullptr) {
        ListNode* temp = A;
        A = A->next;
        temp->next = C;
        C = temp;
    }

    while (B != nullptr) {
        ListNode* temp = B;
        B = B->next;
        temp->next = C;
        C = temp;
    }

    return C;
}

时间复杂度分析:

假设A和B的长度分别为n和m,则遍历A和B的时间复杂度为O(n+m)。因此,总的时间复杂度为O(n+m)。

C++ 链表归并算法:将两个递增有序链表合并为一个递减有序链表

原文地址: https://www.cveoy.top/t/topic/6ZY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录