至少需要两个一个引用记录当前结点,另一个如果发现重复的结点,一直遍历,知道和当前数据不同为止,但是还需要一个当前结点的前驱,一旦发现相同,前驱的下一个结点就改为第一个和当前数据不同的结点。如果不同,三个引用往后移动。
public Node deleteDuplication(Node head)
{
Node p=null;
Node p1=head;
Node p2=head.next;
while(p2!=null){
if(p1.val!=p2.val)
{
p=p1;
p1=p2;
p2=p2.next;
}else{
while(p2!=null&&p1.val==p2.val)
{
p2=p2.next;
}
if(p==null)
{
head=p2; //如果要删除的是头结点,直接让头结点到第一次出现和该数据不同的结点。
}else{
p.next=p2;
}
p1=p2;
p2=p2.next;
}
}
return head;
}