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