题目描述:
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
示例1:
输入:[1, 2, 3, 3, 2, 1]
输出:[1, 2, 3]
示例2:
输入:[1, 1, 1, 1, 2]
输出:[1, 2]
提示:
链表长度在[0, 20000]范围内。
链表元素在[0, 20000]范围内。
思路:
用map记录,然后去重
代码如下:
class Solution {
public:
ListNode* removeDuplicateNodes(ListNode* head) {
if(!head) return head;
unordered_map<int,int>cnt;
ListNode* p=head;
cnt[p->val]++;
while(p){
while(p->next&&cnt[p->next->val]>0){//去重
p->next=p->next->next;
}
if(p->next) cnt[p->next->val]++;
p=p->next;
}
return head;
}
};