问题描述:
Remove all elements from a linked list of integers that have value val
.
Given 1->2->3->3->4->5->3
, val = 3, you should return the list as 1->2->4->5
算法思想:遍历数列中的每一个元素,遇到相同的则删除,最关键要注意的就是当链表的首元素就是目标值时;
public LinkNode removeElements(LinkNode head,int val){
//当head本身为空,或者数列只有一个不为目标值的数时,返回本身
if(head==null||(head.next==null&&head.val!=val)){
return head;
}
//p为当前数列头,temp为下一个元素
LinkNode p=head;
LinkNode temp=p.next;
LinkNode q=null;
//如果p的值等于目标值,且下一个值不为空;
//设置p.next不为空的原因是方法体中设置了p.next,相当于判断前的p的p.next.next;
while(p.val==val&&p.next!=null){
p.next=null;
p=temp;
temp=p.next;
}
//如果数列只剩下一个数字,且该数字的数值为目标值,那么删除后,返回值为空;
if(p.next==null&&p.val==val){
return null;
}
//如果数列的第一个数不为目标值,且下一个元素不为空,开始遍历;
while(temp!=null){
q=temp.next;
if(temp.val==val){
//如果temp值为目标值,则断开p与temp的链接,将p的下一个指向temp的下一个
//达到链表中删除temp的作用
p.next=q;
temp=p.next;
}else{
//否则,顺序遍历
p=temp;
temp=q;
}
}
return head;
}