题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ ListNode* deleteDuplicates(ListNode* head) { if (head == nullptr) return head; map<int, int> hash_table; ListNode* pnode0 = head; ListNode* res = nullptr; while (pnode0 != nullptr) { int key = pnode0->val; if (hash_table.find(key) == hash_table.end()) { hash_table[key] = 1; } else { int value = hash_table[key] + 1; hash_table[key] = value; } pnode0 = pnode0->next; } for (auto it = hash_table.begin(); it != hash_table.end(); it++) { if (it->second == 1) { ListNode* newnode = new ListNode(it->first); if(res == nullptr) res = newnode; else{ ListNode* pnode = res; while(pnode->next != nullptr) pnode = pnode->next; pnode->next = newnode; } } else { continue; } } return res; } };
map存储值和次数;
尾插法;构建新链表;