当前位置 : 主页 > 编程语言 > java >

删除链表中重复的结点

来源:互联网 收集:自由互联 发布时间:2022-09-02
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1-2-3-3-4-4-5 处理后为 1-2-5 思路:先遍历一次链表,统


题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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;
}
};

 

上一篇:数组中只出现一次的数字
下一篇:没有了
网友评论