思路:
删除时考虑头节点是否是要删除的节点,添加一个虚拟头几点指向头节点,这样即使删除头节点时与删除后面节点方法一样。
创建 指针cur 指向虚拟头节点,用于遍历链表。
判断该指针指向的节点的值是否是要删除的元素
,如果是,将cur指向的下一个元素指向下一个节点的下一个。
如果不是,cur向下遍历。
# 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]:
#添加一个 虚拟头节点
dummyHead = ListNode(next = head)
#让虚拟头节点指向头节点
dummyHead.next = head
#新建一个指针指向虚拟头节点,用于遍历链表
cur = dummyHead
while cur.next is not None:
if cur.next.val == val:
cur.next = cur.next.next
else:
cur = cur.next
return dummyHead.next