题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
#include <unordered_map>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
ListNode* deleteDuplicates(ListNode* head) {
// write code here
std::unordered_map<int, int> countMap;
// 统计每个元素的出现次数
ListNode* current = head;
while (current) {
countMap[current->val]++;
current = current->next;
}
// 创建新链表,只保留出现次数为1的元素
ListNode* newHead = nullptr;
ListNode* tail = nullptr;
current = head;
while (current) {
if (countMap[current->val] == 1) {
if (!newHead) {
newHead = tail = new ListNode(current->val);
} else {
tail->next = new ListNode(current->val);
tail = tail->next;
}
}
current = current->next;
}
return newHead;
}
};
思路:哈希表统计数量,然后再找其中只出现一次的,加到新链表。尾插法,newhead和tail
