移除重复节点
题目描述
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
示例1:
输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3]
示例2:
输入:[1, 1, 1, 1, 2] 输出:[1, 2]
提示:
- 链表长度在[0, 20000]范围内。
- 链表元素在[0, 20000]范围内。
进阶:
如果不得使用临时缓冲区,该怎么解决?
解法:
遍历链表,并使用集合记录下已经遇到过的节点,如果遇到重复的节点,就删除掉。
class Solution {
public:
ListNode* removeDuplicateNodes(ListNode* head) {
unordered_set<int> seen;
ListNode *prev, *node;
node = head;
while(node != nullptr){
if(seen.count(node->val) == 0){
seen.insert(node->val);
prev = node;
}else{
prev->next = node->next;
}
node = node->next;
}
return head;
}
};