1、仔细看题,重复的全部都要删干净了,不能留有余地
2、知识点:
链表的遍历
链表的节点删除
链表头节点
3、易错点:
一、当在链表第一个节点就有重复节点,那就不可以将pHead作为返回值,否则一定会保留一个重复值
二、空指针异常,使用循环一定要清楚,几个点不可以有空指针,当使用节点.next.val的时候,就要判断节点的下一跳不可以为空;当节点.next为空的时候,此时节点已经移至链表的末端,此时一定要注意因为会判断节点.val值,所以这时候要添加判断节点是否为空(我使用的节点代号是last)
代码如下:

/*
 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 || pHead.next == null){
            return pHead;
        }
        ListNode head = new ListNode(-1);
        head.next = pHead;
        ListNode pre = head;
        ListNode last =pHead;
        while(pre != null && last != null){
            if(last.next != null && last.val == last.next.val ){
                while(last.next != null && last.val == last.next.val ){
                last = last.next;
            }
            pre.next = last.next;
            if(last.next == null)
                return head.next; 
            last = last.next;
           }
           else{
                pre = last;
                last = last.next;
            }
        }

        return head.next;
  }
}