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

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode deleteDuplicates (ListNode head) {
        // write code here
        //哨兵结点
        ListNode headPre=new ListNode(1);
        headPre.next=head;
        ListNode tempNode=head;
        ListNode tempNodePre=headPre;
        while(tempNode!=null){
            boolean flag=false;
            //删除保留一个重复的元素,设立flag判断是否有删除
            while(tempNode.next!=null&&tempNode.val==tempNode.next.val){
                tempNode.next=tempNode.next.next;
                //表示存在相同元素
                flag=true;
            }
            if(flag){
                //如果有删除,tempNodePre结点跳过该结点指向后面一个,tempNodePre不变
                tempNodePre.next=tempNode.next;
            }else{
                //如果没删除,tempNodePre结点和tempNode结点一起往后移一格
                tempNodePre=tempNodePre.next;
            }
            tempNode=tempNode.next;
        }
        return headPre.next;
    }
}