题目链接:https://leetcode.cn/problems/remove-linked-list-elements/

核心思想:虚拟头节点

链表删除过程

链表1 4 2 4 ,移除元素4

就把元素4的上一个节点的下一个节点 指向 元素4节点的下一个节点

问题在于:如果头节点的元素正好是4,就没有上一个节点操作指向下一个节点

所以引入虚拟头节点

#
# @lc app=leetcode.cn id=203 lang=python3
#
# [203] 移除链表元素
#

# @lc code=start
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        # 在原来的头节点前面,创建一个虚拟头节点,下一个节点指向原来的头节点,完成连接
        dummy_head = ListNode(next=head)

        current = dummy_head

        while current.next:
            if current.next.val == val:
                current.next = current.next.next
            else:
                # 移动到下一个节点
                current = current.next

        return dummy_head.next
            
# @lc code=end