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

public class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode dummy = new ListNode(-1);  // 新定义一个链表
        dummy.next = head;   // 将新定义的链表接上原链表
        ListNode prev = dummy;   // 定义靠前的节点为新链表的第一个节点
        ListNode curr = head;   // 定义靠后的节点为原链表的第一个节点
        while (curr != null && curr.next != null) {   // 如果靠后的节点不为空,且其再往后的节点也不为空
            if (curr.val == curr.next.val) {   // 靠后的节点的值等于其再往后的节点的值
                ListNode temp = curr.next;
                while (temp != null && temp.val == curr.val) {   // 如果其再往后的节点不为空,且其再往后的节点的值等于其的值
                    temp = temp.next;  // 则靠后的节点变为其再往后的节点,逐渐往后
                }
                prev.next = temp;
                curr = temp;
            } else {
                prev = prev.next;
                curr = curr.next;
            }
        }
        return dummy.next;
    }
}