c++删除排序链表中的重复元素
时间: 2024-10-14 07:11:01 浏览: 46
在C++中,删除排序链表中的重复元素通常需要遍历链表,同时维护两个指针,一个用于当前节点,另一个用于检查是否有重复的元素。以下是基本的步骤:
定义一个头指针
prev
,初始值为nullptr
,用于记录前一个节点;定义一个current
指针指向链表的第一个节点。遍历链表,对于每个节点
current
: a. 如果current->val
等于prev->val
并且prev
不为nullptr
,说明找到了重复元素,将prev
节点的下一个节点设置为current
,然后移动prev
到current
,继续检查下一个节点。 b. 否则,如果prev
等于nullptr
或者current->val
大于prev->val
,说明当前节点是一个新的不重复元素,将prev
更新为current
。遍历结束后,链表中的重复元素已经被删除,
current
就是新链表的最后一个节点。
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;
}
相关推荐















