一、题目描述
二、思路分析
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 图解
三、题解
移除链表元素的实现
-
不使用虚拟头节点
-
使用虚拟头节点
-
递归