使用【c++】写【将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍然使用原来两个链表的存储空间,不另外占用其他的存储空间。表中不允许有重复数据。】的代码
时间: 2024-10-09 20:02:27 浏览: 12
在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) {
// 创建一个新的头节点
ListNode* dummy = new ListNode(0);
ListNode* tail = dummy; // 尾节点指向dummy
while (l1 && l2) {
if (l1->val < l2->val) {
tail->next = l1;
l1 = l1->next;
} else if (l1->val > l2->val) {
tail->next = l2;
l2 = l2->next;
} else { // 遇到相等值,只保留其中一个
tail->next = l1;
l1 = l1->next;
}
tail = tail->next;
}
// 如果还有剩余的一个链表未遍历完,将其添加到结果链表的末尾
if (l1)
tail->next = l1;
else
tail->next = l2;
return dummy->next; // 返回新的链表头
}
int main() {
// 测试示例
ListNode* list1 = new ListNode(1);
list1->next = new ListNode(2);
list1->next->next = new ListNode(4);
ListNode* list2 = new ListNode(1);
list2->next = new ListNode(3);
list2->next->next = new ListNode(4);
ListNode* result = mergeTwoLists(list1, list2);
// 打印合并后的链表(仅示例,实际应用中可以省略)
while (result) {
cout << result->val << " ";
result = result->next;
}
return 0;
}
```