删除链表中重复的数字 void LinkList::deleteDuplicates() { //编写满足题目要求的代码 }完善代码
时间: 2024-10-11 20:11:59 浏览: 34
删除链表中重复的数字可以采用迭代或递归的方式实现。这里提供一个基于迭代的解决方案,假设我们有一个名为`ListNode`的链表节点结构,包含`val`(值)和`next`(指向下一个节点的指针)两个属性:
```cpp
#include <iostream>
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
void deleteDuplicates(ListNode*& head) {
if (!head || !head->next) {
return; // 如果链表为空或者只有一个元素,无需处理
}
ListNode* current = head;
while (current->next) {
if (current->val == current->next->val) { // 检查当前节点是否等于下一个节点
ListNode* temp = current->next;
while (temp && temp->val == current->val) { // 移除所有重复的节点
ListNode* nextTemp = temp->next;
delete temp;
temp = nextTemp;
}
current->next = temp; // 更新当前节点的next指针
} else {
current = current->next; // 否则,移动到下一个非重复节点
}
}
}
// 示例用法
int main() {
// 创建一个示例链表
ListNode* list = new ListNode(1);
list->next = new ListNode(2);
list->next->next = new ListNode(3);
list->next->next->next = new ListNode(4);
list->next->next->next->next = new ListNode(2);
list->next->next->next->next->next = new ListNode(5);
// 调用函数删除重复项
deleteDuplicates(list);
// 打印链表
ListNode* temp = list;
while (temp) {
std::cout << temp->val << " ";
temp = temp->next;
}
std::cout << "\n";
// 清理内存
delete temp;
return 0;
}
```
阅读全文