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
        //特殊值处理,当链表为空或者长度为1时,此时链表没有重复元素
        if(head == null || head.next == null){
            return head;
        }
        ListNode flow = head;  //创建一个慢指针,指向链表的头节点
        ListNode fast = flow;  //创建一个块指针,指向链表的第二个节点
        while (fast != null){//当快指针不为空时,快慢指针遍历链表,如果快慢指针指向的节点值相等,则应该删除快指针指向的节点
            if(fast.val == flow.val){//如果快慢指针指向的节点值相等,删除快指针指向的节点
                fast = fast.next;
                flow.next = fast;
            }else {//如果快慢指针指向的节点值不相等,快慢指针移动
                flow = fast;
                fast = fast.next;
            }
        }
        return head;
    }
}