题意:
方法:
计数数组
思路:首先,遍历链表统计各值出现的次数;
然后,遍历链表,将值出现的个数大于1的节点删除。
注意点:为了方便,这里给链表新增头结点。(因为删除某节点必须得知道某节点的前一个节点,防止删除是第一个节点的特例,所以额外新建头结点)
class Solution {
public:
unordered_map<int,int> mp;//计数数组
ListNode* deleteDuplicates(ListNode* head) {
ListNode *p=head;
while(p){
mp[p->val]++;//计数
p=p->next;
}
ListNode *h=new ListNode(0);
h->next=head;//新增头结点
p=h;
ListNode *q=head;
while(q){
if(mp[q->val]>1){//如果个数大于1,则删除
p->next=q->next;
q=q->next;
}else{
p=p->next;
q=q->next;
}
}
return h->next;
}
};
时间复杂度:
空间复杂度:![]()



京公网安备 11010502036488号