/**
* Given a sorted linked list, delete all duplicates such that each element
* appear only once.
*
* For example,
* Given 1->1->2, return 1->2.
* Given 1->1->2->3->3, return 1->2->3.
*
* Tags: Linkedlist
*/
class RemoveDuplicatesFromSortedList {
public static void main(String[] args) {
}
/**
* nested while loop, skip next node
*/
public ListNode deleteDuplicates(ListNode head) {
ListNode cur = head;
while (cur != null) {
while (cur.next != null && cur.val == cur.next.val) {
cur.next = cur.next.next; // skip next node
}
cur = cur.next; // to next node
}
return head;
}
public ListNode myDeleteDuplicates(ListNode head) {
if (head == null) return head;
ListNode dummyHead = new ListNode(0);
dummyHead.next = head;
ListNode pre = head;
ListNode cur = head.next;
while (cur != null) {
while (cur != null && pre.val == cur.val) {
cur = cur.next;
}
pre.next = cur;
pre = cur;
if (cur != null) cur = cur.next;
}
return dummyHead.next;
}
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
}