version on 2022-03-29
/**
1. 因为list 已经排过序了, 所以相等节点必定挨在一起, 所以我们保留第一次简单的节点即可
2.从头开始扫描,
2.1 如果下一个节点: 不是尾部和 && 和当前节点值相等 -> 删掉下一个节点
2.2 不相等 -> 移动到下一个节点
直至扫描完成
3 test case
*/
/**
* 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 p = head;
while (p != null) {
if (p.next != null && p.val == p.next.val) {
p.next = p.next.next;
} else {
p = p.next;
}
}
return head;
}
}
old version: 2020-02-01
/*
从前向后扫描遇到相同点全部删掉
*/
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
var p = head;
while (p != null){
while(p != null && p.next != null && p.next.val == p.val){
p.next = p.next.next;
}
if (p != null)
p = p.next;
}
return head;
}
}