加一个新节点指向head方便处理,一旦发现有两个值是一样的,就让nextDiff指向后面第一个不一样的,并用pre去指向nextDiff;否则,cur就往后走一步
class Solution {
public ListNode deleteDuplication(ListNode head) {
ListNode dummy=new ListNode(0);
dummy.next=head;
ListNode pre=dummy,cur=head;
while(cur!=null && cur.next!=null){
if(cur.val==cur.next.val){
//需要删除,直接跳过就行
int val=cur.val;
ListNode nextDiff=cur.next;
while(nextDiff!=null && nextDiff.val==val){
nextDiff=nextDiff.next;
}
//将pre.next直接指向nextDiff
pre.next=nextDiff;
cur=nextDiff;
}else{
pre=cur;
cur=cur.next;
}
}
return dummy.next;
}
}
妙