/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ #include <set> #include<map> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ //用有序集合可以快速解决问题 ListNode* deleteDuplicates(ListNode* head) { // write code here auto temp=head; std::map<int, int> myMap; while(temp){ if (myMap.count(temp->val)) { int cnt=myMap.at(temp->val)+1; myMap.erase(temp->val); myMap.insert({temp->val, cnt}); } else { myMap.insert({temp->val, 1}); } temp=temp->next; } // 遍历(按键顺序输出)并将只出现一次的数据加入链表中 auto dumpty=new ListNode(0); temp=dumpty; for (const auto& pair : myMap) { if(pair.second==1){ temp->next=new ListNode(pair.first); temp=temp->next; } } //将链表的头节点删除 temp=dumpty->next; dumpty->next=nullptr; delete dumpty; return temp; } };