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;
}
}
京公网安备 11010502036488号