合并两个有序的顺序表,La,Lb有序,从小到大合并到顺序表Lc的C++代码
时间: 2024-09-23 09:15:50 浏览: 42
合并两个有序链表通常是通过遍历和链接的方式实现的。这里是一个简单的C++代码示例,假设`ListNode`是链表节点的结构,包含`int data`和指向下一个节点的指针`next`:
```cpp
#include <iostream>
// 链表节点定义
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 合并两个有序链表函数
ListNode* mergeTwoLists(ListNode* L1, ListNode* L2) {
// 创建一个新的头节点作为结果
ListNode* head = new ListNode(0);
ListNode* tail = head;
// 当两个列表都不为空
while (L1 != nullptr && L2 != nullptr) {
// 如果L1的值小于L2的值,将L1添加到结果
if (L1->val <= L2->val) {
tail->next = L1;
L1 = L1->next;
} else { // 否则,将L2添加到结果
tail->next = L2;
L2 = L2->next;
}
// 指向当前节点的下一个位置
tail = tail->next;
}
// 将剩余未处理的部分连接到结果链表
if (L1 != nullptr) {
tail->next = L1; // 如果L1还有剩余元素
} else {
tail->next = L2; // 如果L2还有剩余元素
}
return head->next; // 返回新的头部节点
}
int main() {
// 测试示例
ListNode* L1 = new ListNode(1);
L1->next = new ListNode(3);
L1->next->next = new ListNode(5);
ListNode* L2 = new ListNode(2);
L2->next = new ListNode(4);
L2->next->next = new ListNode(6);
ListNode* result = mergeTwoLists(L1, L2);
// 打印合并后的链表
while (result != nullptr) {
std::cout << result->val << " ";
result = result->next;
}
return 0;
}
```
阅读全文