LeetCode 83 删除排序链表中的重复元素

65 阅读1分钟

初始代码

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        ListNode* pre=head;
        ListNode *p=head->next;
        int m=head->val;
        while(p!=nullptr)
        {
            if(p->val!=m)
            {
                m=p->val;
                pre=p;
                p=p->next;
            }
            else
            {
                pre->next=p->next;
                p=pre->next;
            }
        }
        return head;
    }
};

存在问题

没有考虑链表为空的情况

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        ListNode* pre=head;
        if(head==nullptr){
            return 0;
        }
        ListNode *p=head->next;
        int m=head->val;
        while(p!=nullptr)
        {
            if(p->val!=m)
            {
                m=p->val;
                pre=p;
                p=p->next;
            }
            else
            {
                pre->next=p->next;
                p=pre->next;
            }
        }
        return head;
    }
};

进一步优化

在这个过程中,我们用了三个变量,pre,p 和整形的 m,是否可以使用一个来解决呢?

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        ListNode* p=head;
        while(p!=nullptr&& p->next!=nullptr)
        {
            if(p->val!=p->next->val)
            {
                p = p->next;
            }
            else
            {
                p->next=p->next->next;
            }
        }
        return head;
    }
};