/**
* Runtime: 0 ms, faster than 100.00%
* Memory Usage: 38 MB, less than 93.09%
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode sentinel = new ListNode(-1), pre = sentinel, curr = head;
while (curr != null) {
if (curr.next == null || curr.val != curr.next.val) {
pre.next = curr;
pre = curr;
} else {
while (curr.next != null && curr.val == curr.next.val) {
curr = curr.next;
}
}
curr = curr.next;
}
pre.next = null;
return sentinel.next;
}
}
/**
* recursive
* Runtime: 0 ms, faster than 100.00%
* Memory Usage: 38.2 MB, less than 76.26%
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) {
return head;
}
if (head.val != head.next.val) {
head.next = deleteDuplicates(head.next);
return head;
}
while (head.next != null && head.val == head.next.val) {
head = head.next;
}
return deleteDuplicates(head.next);
}
}