import java.util.*;

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

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode deleteDuplicates (ListNode head) {
        if(head == null || head.next == null) return head;
//         双端队列
        Deque<ListNode> queue = new ArrayDeque<>();
        ListNode cur = head;
        while(cur != null) {
            boolean isSame = false;
            while(queue.size() != 0 && queue.getLast().val == cur.val) {
                isSame = true;
                cur = cur.next;
                if(cur == null) break;
            }  
            if(isSame) {
                queue.removeLast();
            } 
            if(!isSame) {
                queue.addLast(cur);
                cur = cur.next;
            }
        }
       
        ListNode pHead = new ListNode(-1);
        cur = pHead;
        while(!queue.isEmpty()) {
            cur.next = queue.removeFirst();
            cur = cur.next;
        }
        cur.next = null;
        return pHead.next;
    }
}