目录

力扣82删除排序链表中的重复元素

力扣82:删除排序链表中的重复元素Ⅱ

题目

给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。

思路

思路很简单,我们遍历一次并且在遍历的途中使用哈希表记录每个值出现了多少次,然后再进行一次遍历来删除次数大于1的链表。

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        unordered_map<int, int> um;
        ListNode* cur = head;
        ListNode* prev = nullptr;
        while (cur != nullptr) {
            um[cur->val]++;
            cur = cur->next;
        }
        cur = head;
        ListNode* newnode = new ListNode(0, head);
        prev = newnode;
        while (cur != nullptr) {
            ListNode* tmp = cur->next;
            if (um[cur->val] != 1) {
                prev->next = tmp;
                cur = tmp;
            } else {
                cur = cur->next;
                prev = prev->next;
            }
        }
        return newnode->next;
    }
};