LeetCode 82

https://leetcode.cn/problems/remove-duplicates-from-sorted-list-ii/description/

难度:中等

本题需要删除链表中所有重复数字的节点,只留下不同的数字。为了删除节点,cur 需要在要被删除的节点前面,因此比较 cur->next 和 cur->next->next 的节点值是否相同,如果相同,通过循环将所有等于这个值的节点都删除。否则,更新 cur 到下一个节点。

时间复杂度:O(n),其中 n 为链表的长度。

空间复杂度:O(1),仅用到若干额外变量。

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        ListNode* dummy = new ListNode(0, head);
        ListNode* cur = dummy;
        while (cur->next && cur->next->next) {
            int val = cur->next->val;
            if (cur->next->next->val == val) {
                while (cur->next && cur->next->val == val) {
                    cur->next = cur->next->next;
                }
            } else {
                cur = cur->next;
            }
        }
        return dummy->next;
    }
};