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

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

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

示例 1:

img

输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]

示例 2:

img

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

提示:

  • 链表中节点数目在范围 [0, 300]
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序 排列

思路:

​ 简单链表题。

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if(head==nullptr)return nullptr;
        ListNode* dummy=new ListNode(-1);//虚拟头节点
        ListNode* slow=dummy;
        ListNode* fast=head;
        int preval=head->val;//记录前一个节点的值
        //初始化一下fast指针和preval
        if(fast->next==nullptr||fast->next->val!=preval){
            slow->next=fast;
            slow=fast;
            fast=fast->next;
        }
        while(fast!=nullptr){
            //判断该数是否是重复的节点
            if((fast->next==nullptr||fast->next->val!=fast->val)&&preval!=fast->val){
                slow->next=fast;
                slow=fast;
            }
            preval=fast->val;
            fast=fast->next;
        }
        //最后尾结点是空
        slow->next=nullptr;
        return dummy->next;
    }
};
posted @ 2022-05-25 09:59  BailanZ  阅读(15)  评论(0编辑  收藏  举报