用c++写出合并两个单链表,并删除相同原素
时间: 2024-11-06 14:20:02 浏览: 12
C++代码实例:素数数列
在 C++ 中,合并两个已排序的单链表并删除相同元素可以采用迭代或递归的方式实现。这里是一个简单的迭代方法示例:
```cpp
#include <iostream>
using namespace std;
// 定义链表节点结构体
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* mergeAndRemoveDuplicates(ListNode* head1, ListNode* head2) {
// 创建一个新的头节点
ListNode* dummy = new ListNode(0);
ListNode* tail = dummy;
// 遍历两个链表
while (head1 != NULL && head2 != NULL) {
if (head1->val < head2->val) {
tail->next = head1;
head1 = head1->next;
} else if (head1->val > head2->val) {
tail->next = head2;
head2 = head2->next;
} else { // 同样值,跳过当前节点
head1 = head1->next; // 如果head1也要被删除,就直接移除
head2 = head2->next;
}
tail = tail->next;
}
// 将剩余的部分添加到新链表尾部
if (head1 != NULL)
tail->next = head1;
else if (head2 != NULL)
tail->next = head2;
return dummy->next; // 返回合并后的链表头节点
}
int main() {
// 示例链表
ListNode* list1 = new ListNode(1);
list1->next = new ListNode(2);
list1->next->next = new ListNode(3);
ListNode* list2 = new ListNode(2);
list2->next = new ListNode(4);
list2->next->next = new ListNode(5);
ListNode* result = mergeAndRemoveDuplicates(list1, list2);
// 输出结果...
// 删除相同元素后,打印链表元素
delete result;
delete list1;
delete list2; // 别忘了释放内存
return 0;
}
```
阅读全文