假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请用C++编写算法将A表和B表归并成一个按元素值非递增有序(归并后的表中允许含有值相同的元素)排列的线形表C,并要求利用原表(即A表和B表)的结点空建构造C表。
时间: 2024-10-13 11:12:12 浏览: 50
你可以使用C++的迭代的方式来合并两个已排序的链表。这里是一个简单的伪代码描述以及相应的C++代码实现:
首先,创建一个节点结构体,然后定义一个辅助函数`MergeLists`来合并两个链表。
```cpp
// 节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* MergeLists(ListNode* A, ListNode* B) {
// 当其中一个链表为空时,直接返回另一个链表
if (A == nullptr)
return B;
if (B == nullptr)
return A;
// 创建一个新的链表头,初始指向最小值的那个节点
ListNode* head = A->val < B->val ? A : B;
// 指针分别指向当前元素较小的链表
ListNode* current = head;
while (A != nullptr && B != nullptr) {
if (A->val <= B->val) { // 如果A的值小或相等
current->next = A; // 将A添加到新链表
A = A->next;
} else { // 如果B的值小
current->next = B;
B = B->next;
}
current = current->next;
}
// 将剩余的链表(如果有)添加到新链表尾部
if (A != nullptr)
current->next = A;
else if (B != nullptr)
current->next = B;
return head;
}
```
这个`MergeLists`函数会合并两个输入链表,返回一个新的链表,其中包含所有元素,按非递增顺序排列。
阅读全文