(203)-(Remove Linked List Elements )-(在单链表中删除值为给定值的所有节点)-(头尾的判断)
//在单链表中删除值为给定值的所有节点
public class Solution
{
//尽量先不用递归,因为我已经理不清逻辑了
public ListNode removeElements(ListNode head, int val)
{
//考虑删除头节点好麻烦啊,还有尾节点
//这样删完后,也要随时更新判断是否到头了
//1 1 1 最后为空
//说了多少遍了,这个顺序特别重要,还是写反了
//while(head.val==val && head!=null)
while(head!=null &&head.val==val)
{
//head.next为空,也进行赋值,合理,不care
head=head.next;
}
if(head==null)
{
return null;
}
if(head.next==null)
{
if(head.val==val)
{
return null;
}
else
{
return head;
}
}
//这里肯定超过1个值,且头节点不等于目标值 2 1
ListNode temp=head;
while(temp.next!=null)
{
//不相等,就跳过
if(temp.next.val!=val)
{
temp=temp.next;
}
else
{
//删除temp.next,
//temp.next.next为空,也进行赋值,合理,同样不care
temp.next=temp.next.next;
}
}
//注意不是返回temp,尾插法相似
return head;
}
}