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
if (head == null || head.next == null) {
return head;
}
Stack<ListNode> stack = new Stack<>();
ListNode cur = head;
ListNode pre = null;
while (cur != null) {
if ((stack.isEmpty() && pre == null)
|| pre.val != cur.val) {
stack.push(cur);
} else if (!stack.isEmpty() && stack.peek().val == cur.val) {
stack.pop();
}
pre = cur;
cur = cur.next;
}
ListNode newHead = null;
while (!stack.isEmpty()) {
cur = stack.pop();
if (newHead == null) {
newHead = cur;
newHead.next = null;
} else {
cur.next = newHead;
newHead = cur;
}
}
return newHead;
}
}