用c++编制一个能演示将两个有序表合并为一个有序表的程序
时间: 2024-09-19 15:15:31 浏览: 45
在C++中,我们可以编写一个简单的归并排序算法来演示如何将两个已排序的链表合并成一个新的已排序链表。这里我们假设链表节点包含整数数据,并且每个节点都有指向下一个节点的指针。
```cpp
#include <iostream>
using namespace std;
// 链表节点结构体
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// 归并函数
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (l1 == nullptr) return l2;
if (l2 == nullptr) return l1;
// 创建临时链表头节点
ListNode* dummy = new ListNode(0);
ListNode* tail = dummy;
// 比较两个链表的节点值,选择较小的一个添加到结果链表
while (l1 != nullptr && l2 != nullptr) {
if (l1->val <= l2->val) {
tail->next = l1;
l1 = l1->next;
} else {
tail->next = l2;
l2 = l2->next;
}
tail = tail->next;
}
// 如果其中一个链表还有剩余节点,将其添加到结果链表末尾
if (l1 != nullptr) tail->next = l1;
if (l2 != nullptr) tail->next = l2;
return dummy->next; // 返回新的链表头部
}
int main() {
// 示例两个已排序链表
ListNode* list1 = new ListNode(1);
list1->next = new ListNode(3);
list1->next->next = new ListNode(5);
ListNode* list2 = new ListNode(2);
list2->next = new ListNode(4);
list2->next->next = new ListNode(6);
// 合并链表
ListNode* mergedList = mergeTwoLists(list1, list2);
// 打印合并后的链表
ListNode* current = mergedList;
while (current != nullptr) {
cout << current->val << " ";
current = current->next;
}
delete mergedList; // 释放内存
return 0;
}
```
当你运行这个程序,它会输出"1 2 3 4 5 6",表示已经成功合并了两个有序链表。
阅读全文