题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路:先遍历一次链表,统计重复元素,然后来删除节点。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
map<int,int> m;
if(!pHead) return pHead;
ListNode* c = pHead;
while(c)
{
m[c->val]++;
c = c->next;
}
c = pHead;
ListNode* prev = c;
while(c)
{
if(m[c->val]>1)
{
if(c==pHead)
{
pHead = pHead->next;
c = pHead;
prev = c;
}
else
{
prev->next = c->next;
c = c->next;
}
}
else
{
prev = c;
c = c->next;
}
}
return pHead;
}
};