用c++写一个能删除链表类重复元素的函数
时间: 2024-02-06 15:12:50 浏览: 73
好的,下面是用 C++ 实现删除链表类重复元素的函数:
```c++
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* deleteDuplicates(ListNode* head) {
if (!head) {
return NULL;
}
unordered_map<int, bool> hash_map;
ListNode* pre = NULL;
ListNode* cur = head;
while (cur) {
if (hash_map.find(cur->val) == hash_map.end()) {
hash_map[cur->val] = true;
pre = cur;
} else {
pre->next = cur->next;
delete cur;
}
cur = pre->next;
}
return head;
}
```
这里使用了 STL 中的 `unordered_map` 来实现哈希表,与 Python 中的字典类似。遍历链表时,如果当前元素不在哈希表中,就将其加入哈希表,并将 `pre` 指向当前元素;否则,就将 `pre->next` 指向当前元素的下一个节点,并删除当前节点。最后返回原链表的头节点 `head`。
阅读全文