删除链表中的重复节点
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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;
}
};
删除链表重复节点
本文介绍了一种在排序链表中删除重复节点的方法,并提供了一个具体的C++实现示例。通过使用哈希映射记录每个节点值出现的次数,可以有效地移除所有重复节点。
5万+

被折叠的 条评论
为什么被折叠?



