c++删除排序链表中的重复元素
时间: 2024-10-14 19:11:01 浏览: 27
82. 删除排序链表中的重复元素 II
在C++中,删除排序链表中的重复元素通常需要遍历链表,同时维护两个指针,一个用于当前节点,另一个用于检查是否有重复的元素。以下是基本的步骤:
1. 定义一个头指针`prev`,初始值为`nullptr`,用于记录前一个节点;定义一个`current`指针指向链表的第一个节点。
2. 遍历链表,对于每个节点`current`:
a. 如果`current->val`等于`prev->val`并且`prev`不为`nullptr`,说明找到了重复元素,将`prev`节点的下一个节点设置为`current`,然后移动`prev`到`current`,继续检查下一个节点。
b. 否则,如果`prev`等于`nullptr`或者`current->val`大于`prev->val`,说明当前节点是一个新的不重复元素,将`prev`更新为`current`。
3. 遍历结束后,链表中的重复元素已经被删除,`current`就是新链表的最后一个节点。
```cpp
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* deleteDuplicates(ListNode* head) {
if (head == nullptr || head->next == nullptr) return head;
ListNode* prev = nullptr, *current = head;
while (current != nullptr) {
if (current->val == prev->val && prev != nullptr) {
prev->next = current->next;
} else {
prev = current;
}
current = current->next;
}
return head;
}
```
阅读全文