题意:
方法:
计数数组
思路:首先,遍历链表统计各值出现的次数;
然后,遍历链表,将值出现的个数大于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; } };
时间复杂度:空间复杂度: