题解 | #删除有序链表中重复的元素-I#
删除有序链表中重复的元素-I
http://www.nowcoder.com/practice/c087914fae584da886a0091e877f2c79
我们用到map来存储元素值出现的次数,具体看代码注释
class Solution {
public:
/**
*
* @param head ListNode类
* @return ListNode类
*/
ListNode* deleteDuplicates(ListNode* head) {
// write code here
if(!head||!head->next)
return head;
//用于标记元素值出现的次数
map<int, int> mp;
ListNode *p=head;
while(p)
{
mp[p->val]++;
p=p->next;
}
p=head;
while(p)
{
ListNode *r=p;
//如果p结点的val值出现的次数大于1,我们将一直删除重复的元素,直到val出现的次数为1
while(mp[r->val]>1)
{
mp[r->val]--;
r->next=r->next->next;
if(r==nullptr)
return head;
r=p;
}
p=p->next;
}
return head;
}
};