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;
}
}