Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
Example
Given 1->2->3->3->4->4->5
, return 1->2->5
.
Given 1->1->1->2->3
, return 2->3
.
/**
* Definition for ListNode
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/**
* @param ListNode head is the head of the linked list
* @return: ListNode head of the linked list
*/
public static ListNode deleteDuplicates(ListNode head) {
if(head == null || head.next == null) return head;
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode cur = head, next = head.next, pre = dummy;
while(next != null) {
if(cur.val != next.val) {
pre = pre.next;
cur = cur.next;
next = next.next;
} else {
while(next != null && cur.val == next.val) {
cur = cur.next;
next = next.next;
}
pre.next = next;
if(next != null) {
cur = next;
next = cur.next;
}
}
}
return dummy.next;
}
}