(203)-(Remove Linked List Elements )-(在单链表中删除值为给定值的所有节点)-(头尾的判断)
(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; } }