题目
分析
建立哈希表,将链表中的每个值存进去。后面再遍历链表,判断当前节点的值在哈希表中是否大于1,如果大于1,则将这个节点删除。
本身没什么难度,但还是错了三次,分别是没处理好[1,1,2,3]和[]和[1,1,1]这三类样例。
具体见代码
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
unordered_map<int,int> mp;
ListNode *p=head,*pre=head;
if(!p)//空解
return p;
while(p)
{
mp[p->val]++;
p=p->next;
}
p=head;
while(mp[p->val]>1)
{
p=p->next;
head=p;
if(!p)
break;
}
if(!p)//解走完了
return p;
p=head->next;
pre=head;
while(p)
{
if(mp[p->val]>1)
{
p=p->next;
pre->next=p;
}
else
{
pre=p;
p=p->next;
}
}
return head;
}
};