1、遍历链表,利用栈中存放结点
2、比较当前结点和栈中的末尾元素: 相等则继续遍历后续的结点直到遍历到 不等的结点node 或者null
3、弹栈并判断,栈的大小是否=0(前方还是否有节点/栈中的末尾元素):等于0则,重置pHead;不等于0则将栈中的末尾元素指向不等的结点node
import java.util.*; /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } */ public class Solution { public ListNode deleteDuplication(ListNode pHead) { if(pHead==null){ return pHead; } Stack<ListNode> stack = new Stack(); stack.push(pHead); ListNode cur = pHead.next; while(cur!=null){ if(stack.lastElement().val==cur.val){ //寻找后续重复元素 while(cur!=null&&stack.lastElement().val==cur.val){ cur = cur.next;//删除全部重复元素 } stack.pop();//弹出重复元素 if(stack.size()!=0){//重复元素前还存在结点 stack.lastElement().next = cur; }else{//重复元素前不存在结点 pHead = cur; } } stack.push(cur); if(cur!=null) cur = cur.next; } return pHead; } }