力扣面试150题--删除排序链表中的重复元素 II
Day 37
题目描述
思路
/*** 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;}
}