leetcode 203 Java

 public ListNode removeElements(ListNode head, int val)
    {
       if (head==null) return   null;
       while (head != null && head.val == val) {
        head = head.next;
    }
    if (head == null)
        return null;

       ListNode node =head;
       while (node.next!=null)
       {
           if(node.next.val==val)
           {
               node.next = node.next.next;
           }
           else {
           node = node.next;}
       }
       return  head;
    }

解题思路:(1) 我们需要先将链表的头结点保存下来,但是有一种情况需要注意:头节点的值也要被删除的时候(head.val == val),我们不能简单的直接将head保存起来,要把链表前面连续的需要删除的节点  从链表移除出去,得到一个头节点不需要被删除的新链表(head.val != val)。也就是第1个循环所做的事情。这里需要再做一次非空校验,例如输入[1,1,1] ,1; 链表全是1,执行过(1)后,新链表为空,直接返回null即可。(2) node 的初始值是头节点(不等于val),循环遍历链表的时候,每次执行的操作是 判断下一个节点 是否要删除,即 比较node.next.val 和 val,如果相等,将 判断的节点(node.next)移出链表,node.next  = node.next.next如果不相等,继续往后遍历,node = node.next(3) 最后返回head
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值