力扣线性表删除指定元素
时间: 2025-06-26 18:19:48 浏览: 14
### LeetCode 线性表删除指定元素实现方法
在处理线性表时,删除指定元素是一个常见的需求。以下是基于数组的实现方式,利用双指针法来高效完成这一任务。
#### 方法概述
为了在线性表中删除指定元素并返回新长度,可以采用 **双指针法** 来优化时间复杂度至 O(n),空间复杂度为 O(1)。这种方法的核心在于维护两个指针:一个是慢指针 `slow`,用于记录有效部分;另一个是快指针 `fast`,用于遍历整个数组[^1]。
#### 实现细节
假设输入数组为 `nums`,目标值为 `val`,则可以通过以下步骤实现:
1. 初始化慢指针 `slow = 0` 和快指针 `fast = 0`。
2. 遍历数组,如果当前元素不等于目标值,则将其赋给慢指针位置,并移动慢指针向前一步。
3. 返回慢指针的位置作为新的数组长度。
下面是具体的 Python 实现代码:
```python
def removeElement(nums, val):
slow = 0
for fast in range(len(nums)):
if nums[fast] != val:
nums[slow] = nums[fast]
slow += 1
return slow
```
上述代码的时间复杂度为 O(n),因为每个元素最多被访问两次(一次由快指针读取,一次由慢指针写入)。空间复杂度为 O(1),因为我们是在原地修改数组[^2]。
#### 示例分析
假设有如下输入:
```python
nums = [3, 2, 2, 3]
val = 3
```
执行过程如下:
- 初始状态:`slow=0`, `fast=0`;
- 当 `fast=0` 时,发现 `nums[0]==3`,跳过该步;
- 当 `fast=1` 时,发现 `nums[1]!=3`,将 `nums[1]` 赋值到 `nums[slow]` 并增加 `slow` 的值;
- 继续此过程直到结束,最终得到 `[2, 2]`,其长度为 2。
#### 特殊情况考虑
需要注意的是,在某些情况下可能需要特殊处理:
- 如果数组为空 (`len(nums)==0`),应直接返回 0[^3]。
- 若所有元素均需保留或全部删除,则分别对应于最大和最小的新长度。
---
###
阅读全文
相关推荐


















