ListNode* deleteDuplication(ListNode* pHead)
时间: 2024-09-16 18:05:55 浏览: 36
一元多项式_C++源代码
5星 · 资源好评率100%
`ListNode* deleteDuplication(ListNode* pHead)` 是一个常见的链表操作函数,其目的是删除给定单向链表(由头节点 `pHead` 表示)中的所有重复元素。在这个问题中,每个节点包含一个整数值和指向下一个节点的指针。
该函数通常会通过遍历链表的方式工作,对于当前节点,如果它的值已经在之前遇到过的节点中出现过,则将这个节点从链表中移除,只保留第一次出现的节点。这需要维护一个集合(如哈希集)来跟踪已见的值,遇到相同的值就不再向前移动而是直接跳到下一个未检查的节点。
这里是一个简单的伪代码实现:
```cpp
ListNode* deleteDuplication(ListNode* pHead) {
if (!pHead || !pHead->next) return pHead; // 如果链表为空或只有一个节点,无需处理
std::unordered_set<int> seenValues;
ListNode* current = pHead;
while (current) {
if (seenValues.find(current->val) != seenValues.end()) { // 如果值已存在集合中
ListNode* nextToSkip = current->next;
delete current; // 删除当前节点
current = nextToSkip; // 更新当前节点为下一个非重复节点
} else {
seenValues.insert(current->val); // 添加当前值到集合中
current = current->next;
}
}
return pHead;
}
阅读全文