把上面程序整合成一段完整的程序
时间: 2024-09-19 20:13:39 浏览: 25
当然,这里是一个完整的C++程序,它包含创建双链表、删除重复元素以及打印链表的功能:
```cpp
#include <iostream>
using namespace std;
// 双向链表节点结构
struct ListNode {
int val;
ListNode* prev;
ListNode* next;
ListNode(int x) : val(x), prev(nullptr), next(nullptr) {}
};
// 创建双链表并添加元素
void createList(ListNode** head, int* arr, int n) {
*head = nullptr;
for (int i = 0; i < n; ++i) {
if (*head == nullptr) {
*head = new ListNode(arr[i]);
} else {
ListNode* temp = *head;
while (temp->next != nullptr && temp->next->val == arr[i]) {
temp = temp->next;
}
temp->next = new ListNode(arr[i]);
temp->next->prev = temp;
}
}
}
// 打印链表元素
void printList(ListNode* head) {
ListNode* temp = head;
while (temp != nullptr) {
cout << temp->val << " ";
temp = temp->next;
}
cout << endl;
}
// 删除重复元素
void removeDuplicates(ListNode** head) {
if (*head == nullptr || (*head)->next == nullptr) return;
ListNode* current = *head;
while (current->next != nullptr) {
if (current->val == current->next->val) {
ListNode* toRemove = current->next;
if (toRemove->prev) {
toRemove->prev->next = toRemove->next;
}
if (toRemove->next) {
toRemove->next->prev = toRemove->prev;
}
delete toRemove;
} else {
current = current->next;
}
}
}
int main() {
// 示例输入
int arr[] = {0, 1, 2, 4, 3, 2, 4, 4, 0, 9, 9};
int n = sizeof(arr) / sizeof(arr[0]);
// 创建并初始化双链表
ListNode* head = nullptr;
createList(&head, arr, n);
// 打印原始链表
cout << "Original list:\n";
printList(head);
// 删除重复元素
removeDuplicates(&head);
// 打印去重后的链表
cout << "\nList after removing duplicates:\n";
printList(head);
// 清理内存(仅演示,实际应用中应避免全局变量泄露)
for (ListNode* node = head; node != nullptr; node = node->next)
delete node;
return 0;
}
```
这个程序可以接收示例输入,并展示原始链表及去除重复元素后的新链表。记得在实际项目中,为了避免内存泄漏,最后应该释放分配的动态内存。
阅读全文