移除链表元素

简介: 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;
    }
}
目录
相关文章
|
6天前
|
程序员
【刷题记录】移除链表元素
【刷题记录】移除链表元素
|
4天前
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
5天前
|
存储 C语言
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
|
1月前
【数据结构OJ题】移除链表元素
力扣题目——移除链表元素
31 2
【数据结构OJ题】移除链表元素
|
15天前
|
Python
【Leetcode刷题Python】203.移除链表元素
文章提供了三种删除链表中特定值节点的方法:迭代法、虚拟节点迭代删除法和递归法,并给出了相应的Python实现代码。
8 0
|
1月前
链表4(法二)------7-4 sdut-C语言实验-单链表中重复元素的删除
链表4(法二)------7-4 sdut-C语言实验-单链表中重复元素的删除
22 0
|
2月前
|
算法
【数据结构与算法 刷题系列】移除链表元素
【数据结构与算法 刷题系列】移除链表元素
|
2月前
|
存储 SQL 算法
LeetCode 83题:删除排序链表中的重复元素【面试】
LeetCode 83题:删除排序链表中的重复元素【面试】
|
2月前
|
存储 SQL 算法
LeetCode 题目 82:删除排序链表中的重复元素 II
LeetCode 题目 82:删除排序链表中的重复元素 II
|
2月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表