用到了3个指针,一个哑节点;

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode deleteDuplicates (ListNode head) {
        // write code here
        if(head == null) return null;
        if(head.next == null) return head;
        
        ListNode first = head.next;
        ListNode later = head;
        ListNode pre = new ListNode(-1001);
        pre.next = later;
        ListNode result = pre;
        
        while(first != null){
            
            while(first.val != later.val){
                pre = pre.next;
                later = later.next;
                if(first.next == null){
                    later.next = null;
                    return result.next;
                }
                first = first.next;
                
            }
            while(first.val == later.val){
                if(first.next == null){
                    pre.next = null;
                    return result.next;
                }
                first = first.next;
            }
            later = first;
            pre.next = later;
            if(first.next == null){
                later.next = null;
                return result.next;
            }
            
            first = first.next;
        }
        return result.next;
    }
}