思路
用一个栈存储节点,过滤重复节点,当前与栈顶节点相等,就下一个节点,直到不同节点,把栈顶出栈,连接栈顶与当前。
代码
import java.util.*;
public class Solution {
public ListNode deleteDuplication(ListNode pHead){
if(pHead==null){return pHead;}
ListNode p=new ListNode(0);
ListNode head=p;
p.next=pHead;
Stack<ListNode> stack=new Stack<>();
stack.push(p);
while(p!=null){
if(p.val==stack.peek().val){
while(p!=null && p.val==stack.peek().val){
p=p.next;
}
if(stack.size()>1){ //保留根节点head
stack.pop();
}
stack.peek().next=p;
stack.push(p);
//这里需要判断是否空,否则抛异常
if(p!=null){
p=p.next;
}
}else{
stack.push(p);
p=p.next;
}
}
return head.next;
}
} 
京公网安备 11010502036488号