剑指offer 18.1 删除链表中重复的结点
巧妙利用自建的pre指针指向链表,cur循环至重复元素的最后一个,再利用位于重复元素前的pre和cur.next将重复元素全部删除。因为删除的包含cur本身,所以新建的pre非常重要!
public class Solution { public ListNode deleteDuplication(ListNode pHead){ if(pHead==null||pHead.next==null)//必须要先写pHead再写pHead.next 要不然会指针错误!! return pHead; ListNode pre=new ListNode(Integer.MIN_VALUE); ListNode temp=pre; pre.next=pHead; ListNode cur=pHead; while(cur!=null){ if(cur.next!=null&&cur.val==cur.next.val){ while(cur.next!=null&&cur.val==cur.next.val){ cur=cur.next; } cur=cur.next; pre.next=cur; } else{ cur=cur.next; pre=pre.next; } } return temp.next; } }