用完整c++语言编写将两个从大到小排列的顺序表合并为一个从大到小排列的顺序表
时间: 2024-10-13 11:03:52 浏览: 27
当你有两个已排序(从大到小)的顺序表,要将它们合并成一个新的顺序表,你可以使用双指针的方法,分别遍历两个列表,每次都选择较大的元素添加到新列表中。这里是一个简单的C++实现:
```cpp
#include <iostream>
// 定义顺序表节点结构
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 合并两个排序列表
ListNode* mergeSortedLists(ListNode* list1, ListNode* list2) {
if (list1 == nullptr) return list2; // 如果list1为空,直接返回list2
if (list2 == nullptr) return list1; // 如果list2为空,直接返回list1
// 比较并选择较大的元素
if (list1->val >= list2->val) {
list1->next = mergeSortedLists(list1->next, list2); // 递归合并剩余部分
return list1;
} else {
list2->next = mergeSortedLists(list1, list2->next);
return list2;
}
}
// 打印链表
void printList(ListNode* head) {
ListNode* current = head;
while (current != nullptr) {
std::cout << current->val << " -> ";
current = current->next;
}
std::cout << "nullptr\n";
}
int main() {
// 假设你已经有了两个已排序的列表,例如:
ListNode* list1 = new ListNode(5);
list1->next = new ListNode(3);
list1->next->next = new ListNode(2);
ListNode* list2 = new ListNode(7);
list2->next = new ListNode(6);
list2->next->next = new ListNode(4);
// 创建新的合并后的列表
ListNode* mergedList = mergeSortedLists(list1, list2);
// 打印结果
printList(mergedList);
// 不忘了释放内存
delete mergedList;
delete list1;
delete list2;
return 0;
}
```
这个程序首先定义了一个`ListNode`结构体表示链表节点,然后定义了`mergeSortedLists`函数用于合并两个链表,以及一个辅助函数`printList`用来打印链表的内容。在`main`函数中,创建了两个示例链表并调用`mergeSortedLists`进行合并,最后输出合并后的大到小排序链表。
阅读全文