删除链表中值为x的全部结点
时间: 2024-05-10 15:14:24 浏览: 52
对给定的链表 L ,设计一个算法,删除 L 中值为 x 的结点的直接前驱结点。删除结点.cpp
可以使用双指针来解决这个问题。我们用一个指针 `pre` 指向当前节点的前一个节点,用另一个指针 `cur` 指向当前节点。如果当前节点的值等于 `x`,我们将 `pre` 的 `next` 指针指向 `cur` 的 `next`,然后将 `cur` 指针移动到 `cur.next`。如果当前节点的值不等于 `x`,我们就将 `pre` 和 `cur` 指针都向前移动一个节点。
具体实现如下:
```python
def removeElements(head, val):
# 处理头结点为要删除的节点的情况
while head and head.val == val:
head = head.next
if not head:
return None
pre = head
cur = head.next
while cur:
if cur.val == val:
pre.next = cur.next
cur = cur.next
else:
pre = cur
cur = cur.next
return head
```
时间复杂度是 $O(n)$,其中 $n$ 是链表的长度,空间复杂度是 $O(1)$。
阅读全文