移除链表元素(删除所有val的节点)

本文详细介绍了如何从链表中删除所有指定值的节点,通过实例化新头节点并遍历原链表,根据节点值决定是否跳过当前节点,最终形成不含指定值的新链表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

移除链表元素(删除所有val的节点)

在这里插入图片描述
如图我们要删除值为val的所有元素
我的思路:
1.出于空间复杂度的考虑我们这只实例化一个节点node用来当作删除后链表的头节点
2.我们用node1=node记录头节点
3.当head!=null时我们判断head.val==vall如果是true 则使node.next=head.next
4.否则(else)我们使node.next=head,node=node.next
5.相信大家肯定有疑惑为什么只在else里node=node.next这是因为都这样会把重复的节点拿来而且会莫名的进入死循环不信大家可以试试
https://leetcode-cn.com/explore/learn/card/linked-list/195/classic-problems/752/
这里会比较绕但是想清楚了就可以了
6.最后head=head.next;
上代码:

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        if(head==null){
            return null;
        }
        ListNode node=new ListNode(100);//实例化一个头节点用来记录新链表
        ListNode node1=node;//记录弄node
        while(head!=null){
            //这里会比较绕
            if(head.val!=val){
                 node.next=head.next;/*如果head要删除直接node.next=head.next下一次如果不
                                      相等则覆盖当前节点刚好把等于的节点绕过
                                      */
            }else{
                node.next=head;//不相等接入或覆盖
                node=node.next;//移动新链表的指针
              
            }
            head=head.next;//下一个节点
        }
        return node1.next;//返回新链表
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值