移除链表元素

简介: 1. 判断head是否为空,为空的话直接返回空(链表的题基本上都要考虑是否为空)2. 定义两个节点,一个在前(cur)一个在后(prev)(当cur.val == val 的时候,可以通过prev将后面的节点跳过这个节点连接到下一个节点)

目录


题目要求


思路


代码展示


1.判断是否为空


2.删除除第一个外其他等于val的元素


3.处理第一个元素


4.整体展示(移除链表元素)


题目要求

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

58a351deb5be7087c2c804e9bdb126f3_44e325e7792d44eb977f77c4b47f4866.png思路

1. 判断head是否为空,为空的话直接返回空(链表的题基本上都要考虑是否为空)


2. 定义两个节点,一个在前(cur)一个在后(prev)(当cur.val == val 的时候,可以通过prev将后面的节点跳过这个节点连接到下一个节点)

ac2c06dcac93432d65c693d1055bd2fb_c76fa41c9e964091a135cd1a48eec7dc.png

3.友友们可以发现这样写的话,就没有判断第一个是否要删除,所以再单独判断第一个是否要删除


代码展示

1.判断是否为空

 

        //判断是否为空
        if(head == null) {
            return null;
        }

2.删除除第一个外其他等于val的元素

   

        //删除除第一个外其他等于val的元素
        ListNode prev = head;
        ListNode cur = head.next;
        while(cur != null) {
            if(cur.val == val) {
                prev.next = cur.next;
                cur = prev.next;
            } else {
                prev = prev.next;
                cur = cur.next;
            }
        }

3.处理第一个元素

   

//处理第一个元素
        if(head.val == val) {
            head = head.next;
        }

4.整体展示(移除链表元素)

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        //判断是否为空
        if(head == null) {
            return null;
        }
        //删除除第一个外其他等于val的元素
        ListNode prev = head;
        ListNode cur = head.next;
        while(cur != null) {
            if(cur.val == val) {
                prev.next = cur.next;
                cur = prev.next;
            } else {
                prev = prev.next;
                cur = cur.next;
            }
        }
        //处理第一个元素
        if(head.val == val) {
            head = head.next;
        }
        return head;
    }
}
目录
相关文章
|
12月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
125 1
|
4月前
|
存储
203. 移除链表元素,707.设计链表,206. 反转链表
链表是数据结构中的重要概念,包含单链表、双链表和循环链表。单链表每个节点存储数据与下一节点指针;双链表增加上一节点指针;循环链表首尾相连。 **例题解析:** 1. **203. 移除链表元素**:通过遍历链表删除指定值节点,注意处理头节点特殊情况。 2. **707. 设计链表**:实现链表的增删查操作,需理解指针操作逻辑,避免直接修改目标节点。 3. **206. 反转链表**:采用双指针或递归方法改变节点指向,完成链表反转。 以上题目涵盖链表核心操作,掌握后可灵活应对相关问题。
|
程序员
【刷题记录】移除链表元素
【刷题记录】移除链表元素
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
12月前
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
84 0
|
存储 C语言
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
152 0
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
|
Python
【Leetcode刷题Python】203.移除链表元素
文章提供了三种删除链表中特定值节点的方法:迭代法、虚拟节点迭代删除法和递归法,并给出了相应的Python实现代码。
106 0
链表4(法二)------7-4 sdut-C语言实验-单链表中重复元素的删除
链表4(法二)------7-4 sdut-C语言实验-单链表中重复元素的删除
97 0