给定一个单链表的头节点head。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉
时间: 2023-05-21 07:03:15 浏览: 98
可以使用双指针的方法,一个指针指向当前节点,另一个指针指向当前节点的前一个节点。遍历链表,如果当前节点的值等于val,则把前一个节点的next指向当前节点的next,即跳过当前节点。如果当前节点的值不等于val,则把两个指针都向后移动一位。最后返回头节点即可。
以下是示例代码:
ListNode* removeElements(ListNode* head, int val) {
ListNode* dummy = new ListNode(0); // 创建一个虚拟头节点
dummy->next = head;
ListNode* prev = dummy;
ListNode* curr = head;
while (curr != nullptr) {
if (curr->val == val) {
prev->next = curr->next;
delete curr;
curr = prev->next;
} else {
prev = curr;
curr = curr->next;
}
}
head = dummy->next;
delete dummy;
return head;
}
相关问题
给定一个单链表的头节点head。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉并注释解析
可以使用双指针来遍历链表,一个指针指向当前节点,另一个指针指向当前节点的前一个节点。如果当前节点的值等于val,则把前一个节点的next指针指向当前节点的下一个节点,然后删除当前节点。如果当前节点的值不等于val,则两个指针都向后移动一个节点。最后返回链表的头节点即可。
以下是示例代码:
```
ListNode* removeElements(ListNode* head, int val) {
ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* prev = dummy;
ListNode* curr = head;
while (curr != NULL) {
if (curr->val == val) {
prev->next = curr->next;
delete curr;
curr = prev->next;
} else {
prev = curr;
curr = curr->next;
}
}
return dummy->next;
}
```
这段代码实现了删除链表中所有值为val的节点,并返回删除后的链表的头节点。
删除链表中等于给定值 val 的所有节点 给你一个链表的头节点 head 和一个整数 val!,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 示例 1: 输入:head=[1,2,6,3,4,5,6],val=6 输出:[1,2,3,4,5]
删除链表中等于给定值 `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
```
阅读全文