删除链表中的重复节点
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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 {
private:
map<int, int> amap;
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if(pHead == nullptr) return pHead;
if(pHead->next == nullptr) return pHead;
ListNode* h = new ListNode(0);
h->next = pHead;
ListNode* p = pHead;
while(p) {
amap[p->val]++;
p = p->next;
}
p = h;
while(ListNode* q = p->next) {
if(amap[q->val] > 1) {
p->next = q->next;
delete q;
}
else {
p = p->next;
amap[q->val]++;
}
}
pHead = h->next;
delete h;
return pHead;
}
};