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

暴力解:
/** * 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, bool> record; ListNode *vhead = new ListNode(0, head); if (head && head -> next) { ListNode *pre = vhead, *cur = head, *nxt = head -> next; while(nxt){ //遍历以尾指针有效为边界 while (cur -> val == nxt -> val) { //删除后续重复元素 record[cur -> val] = true; cur -> next = nxt -> next; nxt = cur -> next; if (nxt == nullptr){ break; } } if (record[cur -> val]) { //删除最早的重复元素 pre -> next = cur -> next; cur = pre -> next; if (cur) nxt = cur -> next; } else { //正常更新指针 pre = cur; cur = nxt; nxt = nxt -> next; } } } return vhead -> next; } };
浙公网安备 33010602011771号