3.已知两个链表 A和 B,其元素值递增排序。编程将A和B合并成一个递减有序(相同值元素只保留一个)的链表C,并要求利用原表结点。(本题选做)请用c++实现
时间: 2024-10-21 18:02:40 浏览: 28
为了将两个递增排序的链表 A 和 B 合并成一个递减有序的链表 C,同时利用原链表节点,你可以创建一个新的头节点,并遍历两个链表,每次从较大的节点开始取出较小的节点添加到新链表中。当其中一个链表遍历完之后,将另一个链表剩余的部分依次添加到新链表的尾部。以下是使用 C++ 实现的一个例子:
```cpp
#include <iostream>
// 链表节点定义
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* mergeTwoLists(ListNode* A, ListNode* B) {
// 新建一个头节点作为合并后的链表起点
ListNode* dummy = new ListNode(0);
ListNode* tail = dummy;
while (A && B) {
if (A->val > B->val) {
tail->next = A;
A = A->next;
} else {
tail->next = B;
B = B->next;
}
tail = tail->next;
}
// 如果还有剩余节点,将其添加到新链表的尾部
if (A) {
tail->next = A;
} else {
tail->next = B;
}
return dummy->next; // 返回合并后的链表的新头节点
}
// 打印链表辅助函数
void printList(ListNode* head) {
while (head) {
std::cout << head->val << " ";
head = head->next;
}
std::cout << "\n";
}
int main() {
// 假设 A 和 B 分别代表两个递增链表
ListNode* A = createIncreasingList({5, 2, 8}); // 创建示例链表 A
ListNode* B = createIncreasingList({1, 9, 7});
// 合并链表
ListNode* C = mergeTwoLists(A, B);
// 输出结果
std::cout << "Sorted list in descending order: ";
printList(C);
return 0;
}
```
注意,这里`createIncreasingList`是一个假设函数,用于创建一个递增有序的链表,你需要根据实际需求去实现它。此代码示例并未包含链表节点的创建部分,但你应该能理解如何构建它们。
阅读全文