82. 删除排序链表中的重复元素 II
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
// 执行用时:1 ms, 在所有 Java 提交中击败了93.57%的用户
// 内存消耗:39.8 MB, 在所有 Java 提交中击败了5.64%的用户
public ListNode deleteDuplicates(ListNode head) {
//若这一个和上一个重复,flag = 1
//若这一个和上一个不同,flag = 0
//先判断flag,flag = 1,删掉上一个:把当前给上上个.next
if(head == null || head.next == null){
return head;
}
int flag = 0;
//先找到头
// if(head.next.next == null){
// if(head.next.val == head.val)
// return null;
// return head;
// }
while(head.next != null){
if(head.next.val == head.val ){
flag = 1;
head = head.next;
}
else
if(flag == 1){
flag = 0;
head = head.next;
}else
break;
}
if(flag == 1){
flag = 0;
head = head.next;
}
if(head == null || head.next == null || head.next.next == null){
return head;
}
ListNode last = head;
ListNode pre = head.next;//上个,在p改变前记录p
ListNode p = head.next.next;
while(p.next != null){
if(p.val == pre.val){
flag = 1;
last.next = p;
pre = pre.next;
p = p.next;
}else{
if(flag == 1){
last.next = p;
pre = pre.next;
p = p.next;
}else{
last = pre;
pre = p;
p = p.next;
}
flag = 0;
}
}
if(p.val == pre.val){
flag = 1;
last.next = p;
pre = pre.next;
p = p.next;
}
if(flag == 1 ){
last.next = p;
}
return head;
}
}