📅  最后修改于: 2023-12-03 15:28:42.324000             🧑  作者: Mango
在一个排序的链表中,给定一个值,删除该值的所有节点。
def deleteAllOccurances(head: ListNode, val: int) -> ListNode:
pass
head
: 待操作链表头节点val
: 要删除的值返回删除后的链表头节点。
本题要求我们在一个排序链表中删除所有值为 val
的节点。对于链表操作的问题,我们可以用双指针(快慢指针)来解决。
具体来说,我们可以维护一个指针 prev
指向当前节点的前一个节点,一个指针 cur
指向当前节点,然后一遍遍历链表,如果当前节点的值等于要删除的值,就删除当前节点(将 prev.next
指向 cur.next
),否则就将 prev
指向 cur
。
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def deleteAllOccurances(head: ListNode, val: int) -> ListNode:
# 处理头节点
while head and head.val == val:
head = head.next
if not head:
return head
# 处理非头节点
prev, cur = head, head.next
while cur:
if cur.val == val:
prev.next = cur.next
else:
prev = cur
cur = cur.next
return head
时间复杂度 $O(n)$,空间复杂度 $O(1)$。