思路

用一个栈存储节点,过滤重复节点,当前与栈顶节点相等,就下一个节点,直到不同节点,把栈顶出栈,连接栈顶与当前。

代码

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;

    }
}