[链表] - 代码随想录 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;
}
}