移除重复节点

题目描述

来源于 https://leetcode-cn.com/

编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。

示例1:

 输入:[1, 2, 3, 3, 2, 1]
 输出:[1, 2, 3]

示例2:

 输入:[1, 1, 1, 1, 2]
 输出:[1, 2]

提示:

  1. 链表长度在[0, 20000]范围内。
  2. 链表元素在[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;
    }
};