已知一个双向链表,编写算法删除表中所有重复的元素(需预先创建符合要求的双向链表)。
时间: 2024-02-01 21:13:03 浏览: 35
可以使用哈希表来解决这个问题,具体步骤如下:
1. 创建一个哈希表,用于存储已经出现过的元素。
2. 遍历双向链表,对于每个节点执行以下操作:
a. 如果当前节点的值不在哈希表中,则将其插入哈希表中,并将当前节点指针后移一位。
b. 如果当前节点的值在哈希表中,则删除当前节点,并将当前节点指针后移一位。
3. 遍历完成后,返回新的双向链表。
以下是 C++ 代码实现:
```cpp
struct ListNode {
int val;
ListNode* prev;
ListNode* next;
ListNode(int x) : val(x), prev(NULL), next(NULL) {}
};
ListNode* deleteDuplicates(ListNode* head) {
unordered_set<int> hash;
ListNode* cur = head;
while (cur != NULL) {
if (hash.count(cur->val) == 0) {
hash.insert(cur->val);
cur = cur->next;
} else {
ListNode* prev = cur->prev;
cur->prev->next = cur->next;
if (cur->next != NULL)
cur->next->prev = prev;
ListNode* temp = cur;
cur = cur->next;
delete temp;
}
}
return head;
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)