剑指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;
}
}
