[链表] - 代码随想录 203. 移除链表元素

链表 - 代码随想录 203. 移除链表元素

题目描述:

删除链表中所有值为 val 的节点。

示例:

输入: 1 -> 2 -> 6 -> 3 -> 4 -> 5 -> 6, val = 6

输出: 1 -> 2 -> 3 -> 4 -> 5

题解思路:

为了方便处理头节点可能被删除的情况,我们通常会创建一个虚拟头节点(dummy node),然后从该节点开始遍历链表。在遍历过程中,如果当前节点的下一个节点的值等于目标值 val,则跳过该节点;否则,继续向后移动。

Java 实现:

java 复制代码
/**
 * 定义单链表节点
 */
class ListNode {
    int val;
    ListNode next;
    ListNode() {}
    ListNode(int val) { this.val = val; }
    ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        // 创建虚拟头节点
        ListNode dummy = new ListNode(0, head);
        ListNode cur = dummy;

        while (cur != null && cur.next != null) {
            if (cur.next.val == val) {
                // 如果下一个节点的值等于 val,则跳过该节点
                cur.next = cur.next.next;
            } else {
                // 否则,移动到下一个节点
                cur = cur.next;
            }
        }

        // 返回虚拟头节点的下一个节点,即为新的链表头
        return dummy.next;
    }
}
相关推荐
suhan2 小时前
【数据结构】二、线性表:2.单链表的定义与实现(带头结点与不带头结点的区别)
数据结构
AgentMaster4 小时前
数据治理工具选型指南:一套可复用的四阶段决策框架
大数据·数据结构·人工智能·算法
不会就选b5 小时前
数据结构之树&&二叉树(四)
数据结构·算法
find1star6 小时前
LeetCode 25:K 个一组翻转链表
java·数据结构·算法·leetcode·链表·职场和发展·动态规划
ysu_03147 小时前
13-图的基础:存储与表示
数据结构·
青山木8 小时前
Hot 100 --- 划分字母区间
java·数据结构·算法·leetcode·贪心算法
橘子汽水1688 小时前
Leetcode 208,207实现Trie前缀树,课程表
java·数据结构·算法·leetcode
wabs6669 小时前
关于二叉树【力扣116.填充每个节点的下一个右侧节点指针的思考】
数据结构·c++·算法·leetcode·二叉树·层序遍历
船厂电气自动化ai大模型9 小时前
AI大模型与数学 第73课 秩的核心定义、矩阵秩的通用求解方法
开发语言·数据结构·机器学习