[链表] - 代码随想录 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;
    }
}
相关推荐
十二1 小时前
【洛谷题解】P1115 最大子段和(前缀和 + 维护最小前缀)
数据结构·c++·算法·蓝桥杯
2501_933923252 小时前
双指针算法:移动零+复写零(Java)
数据结构·算法·双指针
suhan4 小时前
【数据结构】六、图:4.图的遍历(深度优先算法DFS、广度优先算法BFS)
数据结构·算法·排序算法
suhan4 小时前
【数据结构】六、图:3.十字链表、邻接多重表、边集数组
数据结构·算法·排序算法
kiracrimson5 小时前
STL简单引入:把数据结构做成模板
开发语言·数据结构·c++
HPtiger5 小时前
交换类排序详解:冒泡排序与快速排序
数据结构·算法·排序算法
kyle~6 小时前
数据结构 --- 无锁队列(Lock-Free Queue)
linux·数据结构·c++·多线程·并发
Cccp.1236 小时前
【leetcode】(十四)从暴力递归到动态规划
数据结构·算法·leetcode·动态规划
凤凰院凶涛QAQ17 小时前
《Java版数据结构 & 集合类剖析》Map & Set & 反射:“从哈希碰撞到红黑树转换,反射帮你扒开 HashMap 的桶数组看个究竟”
java·数据结构·算法
H.莓飛17 小时前
【数据结构】排序_OJ题(一):计数、桶与排序后的处理
java·开发语言·数据结构