可以使用迭代方法来删除链表中所有值等于 val
的节点。以下是 Python 代码实现:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def remove_elements(head: ListNode, val: int) -> ListNode:
dummy = ListNode(0) # 创建虚拟头节点
dummy.next = head
prev, curr = dummy, head
while curr:
if curr.val == val:
prev.next = curr.next # 跳过当前节点
else:
prev = curr # 仅在未删除节点时移动 prev
curr = curr.next # 移动到下一个节点
return dummy.next # 返回新的头节点
代码解析:
- 使用虚拟头节点 (
dummy
)- 这样可以方便删除原头节点,无需特殊处理。
- 双指针遍历 (
prev
和curr
)curr
负责遍历整个链表。prev
记录curr
的前驱节点,以便跳过目标节点。
- 删除节点的逻辑
- 如果
curr.val == val
,直接跳过当前节点 (prev.next = curr.next
)。 - 如果
curr.val != val
,则移动prev
指针。
- 如果
时间 & 空间复杂度:
- 时间复杂度:
O(n)
(遍历整个链表一次) - 空间复杂度:
O(1)
(仅使用了常数级别的额外空间)
这样就能高效地删除链表中所有等于 val
的节点!🚀