C++ 链表归并算法:将两个递增有序链表合并为一个递减有序链表
C++ 链表归并算法:将两个递增有序链表合并为一个递减有序链表
算法思路:
- 创建一个新的链表C,作为归并后的结果链表。
- 分别遍历链表A和B,比较节点的值大小,并将较小的节点添加到链表C的头部。
- 当其中一个链表遍历完毕后,将另一个链表剩余的节点依次添加到链表C的头部。
- 返回链表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)。
原文地址: https://www.cveoy.top/t/topic/6ZY 著作权归作者所有。请勿转载和采集!