LeetCode:移除链表元素

218 阅读1分钟

一、题目描述

二、思路分析

2.1 分析

    这道题有三种方式解决:
        1. 第一种思路是不使用虚拟头节点。如果发现某个节点的值与给定的删除节点值 val 相同,就用删除节点的前一个节点 prev 指向删除节点的后一个。否则节点 prev 向后移动一位。特别需要注意的是链表首元素的值等于val的情况;
        2. 第二种思路是使用虚拟头节点,统一删除的逻辑操作。首先定义一个虚拟头节点 dummyHead,让 dummyHead.next 指向链表的头节点 head。让 cur 指向 dummyHead,如果发现当前节点的下一个节点 cur.next 的值与 val 相等, 就让当前节点的下一个节点 cur.next 指向 当前节点的下一个节点的节点 cur.next.next。否则节点 cur 向后移动一位;
        3. 第三种思路,是递归。重点是找出递归的三要素。

2.2 图解

三、题解

移除链表元素的实现

  • 不使用虚拟头节点

  • 使用虚拟头节点

  • 递归