删除链表中等于给定值 val 的所有节点 给你一个链表的头节点 head 和一个整数 val!,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 示例 1: 输入:head=[1,2,6,3,4,5,6],val=6 输出:[1,2,3,4,5]
时间: 2024-09-18 07:05:30 浏览: 72
删除链表中等于给定值 `val` 的所有节点是一个常见的链表操作问题。你可以通过迭代或递归的方式解决这个问题。以下是使用迭代的一个基本步骤:
1. 定义两个指针,一个 `prev` 指向当前节点前一个节点,一个 `current` 初始指向头节点 `head`。
2. 遍历链表:
- 如果 `current` 节点的值等于 `val`,则更新 `prev` 的 next 指针,使其跳过当前节点,因为下一个节点应该是下一个有效节点。
- 否则,将 `prev` 和 `current` 都向前移动一步,继续检查下一个节点。
3. 遍历结束后,`prev` 指向的就是新链表的头节点。
Python伪代码示例:
```python
def delete_nodes(head, val):
if not head:
return None
prev = None
current = head
while current:
if current.val == val:
if not prev:
head = current.next
else:
prev.next = current.next
else:
prev = current
current = current.next
return head
```
相关问题
删除链表中等于给定值 val 的所有节点
删除链表中等于给定值 `val` 的所有节点是一个常见的链表操作,通常会涉及到迭代或递归的方式来实现。这里是一种基本的迭代方法:
1. 定义两个指针,一个称为 `current`,用于遍历链表,另一个叫做 `prev`,用于记录 `current` 之前的位置。初始时,两者都指向链表的头结点。
2. 当 `current` 指向的节点值等于 `val` 时:
- 如果这是第一个节点(即 `prev` 为空),则需要创建一个新的链表头部。
- 否则,将 `prev` 的 `next` 指向 `current` 的下一个节点,跳过当前节点。
- 更新 `prev` 为 `current`,以便于处理下一个匹配的节点。
3. 遍历完链表后,如果最后一个节点被删除了(即 `current` 空),可能需要更新头结点。
下面是伪代码示例:
```python
def remove_nodes(head, val):
dummy = ListNode(0) # 创建虚拟头节点,方便处理头节点的情况
dummy.next = head
current = dummy
prev = None
while current is not None:
if current.val == val:
if prev is None: # 处理头节点
head = current.next
else:
prev.next = current.next
else:
prev = current
current = current.next
return dummy.next # 返回新链表的头节点
```
删除链表中等于给定值val的所有节点
在链表中删除所有等于给定值 `val` 的节点,你可以按照下面的步骤操作:
1. 定义两个指针,`prev` 用于保存当前节点的前一个节点,`current` 用于遍历链表。
2. 初始化 `prev` 为 `None`,`current` 为链表的头节点。
3. 遍历链表:
a. 如果 `current` 的值等于 `val`,这意味着找到了需要删除的节点:
- 如果这是第一个节点(`prev` 为 `None`),直接更新头节点为 `current.next`。
- 否则,将 `prev` 的下一个节点设置为 `current.next`,跳过这个节点。
b. 把 `current` 指向下一个节点,即 `current = current.next`。
c. 更新 `prev` 为当前节点,因为可能需要在其后删除节点。
4. 遍历完成后,链表就只剩下不等于 `val` 的节点了。
这是一个简单的伪代码实现:
```python
def remove_elements_with_value(head, val):
if not head:
return None
prev = None
current = head
while current:
if current.val == val:
if not prev:
head = current.next
else:
prev.next = current.next
else:
prev = current
current = current.next
return head
```
阅读全文