思路
用一个栈存储节点,过滤重复节点,当前与栈顶节点相等,就下一个节点,直到不同节点,把栈顶出栈,连接栈顶与当前。
代码
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; } }