题解 | #删除有序链表中重复的元素-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