题意:


方法:
计数数组

思路:
        首先,遍历链表统计各值出现的次数;
        然后,遍历链表,将值出现的个数大于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;
    }
};


时间复杂度:
空间复杂度: