力扣面试150题--删除排序链表中的重复元素 II

Day 37

题目描述

力扣面试150题--删除排序链表中的重复元素 II_第1张图片

思路

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
         ListNode before=new ListNode();
        before.next=head;//空头结点
        ListNode x=head;//指向当前结点
        ListNode b=before;//指向前一个节点
        int num=-101;//存放前一个的值
        int m=0;
        ListNode d=before;//d指向前一个的前一个
        while(x!=null){//遍历
            if(x.val==num){//说明发生了重复
                b.next=x.next;//删除
                x=x.next;//下一个
                m=1;//说明这个起始重复的也不能留
            }
            else{
                if(m==1){//删除第一个重复的元素
                    d.next=b.next;
                    num=x.val;//更新此时的值
                    b=d.next;//删除第一个重复的
                    x=x.next;
                    m=0;
                }
                else{
                    d=b;//更新d为不重复的前一个 用于删除第一个重复的
                    num=x.val;
                    b=b.next;
                    x=x.next;
                }

            }
        }
         if(x==null&&m==1){//最后需要处理最后一个重复的第一个
            d.next=b.next;
        }
        return before.next;
    }
}

你可能感兴趣的:(leetcode)