剑指offer-56-删除链表重复节点
删除链表中重复的结点
http://www.nowcoder.com/questionTerminal/fc533c45b73a41b0b44ccba763f866ef
思路
用一个栈存储节点,过滤重复节点,当前与栈顶节点相等,就下一个节点,直到不同节点,把栈顶出栈,连接栈顶与当前。
代码
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; } }
剑指offer与数据结构 文章被收录于专栏
本专栏包括剑指offer题目和一些刷题用的数据结构,单调栈,树状数组,差分数组,后面还会更新红黑树等较为复杂的数据结构