给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 node.val == val 的节点,并返回 新的头节点 。
时间: 2023-05-03 09:02:44 浏览: 63
这道题要求我们给出一个链表的头节点 head 和一个整数 val,在链表中删除所有值等于 val 的节点,并返回新的头节点。
具体做法为遍历整个链表,如果节点的值等于 val,就将该节点从链表中删除。最后返回修改后的头节点即可。
相关问题
C++实现:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回新的头节点。
好的,我明白了。这个问题可以通过遍历链表并逐一判断节点的值是否满足条件来解决。具体实现可以采用头节点之前添加一个 dummy 节点的做法来简化删除头节点的过程,然后用一个指针 prev 来记录当前节点的前一个节点,当节点满足条件时,让 prev 的 next 指向当前节点的下一个节点即可。以下是代码实现:
```
struct ListNode* removeElements(struct ListNode* head, int val){
struct ListNode *dummy = (struct ListNode *) malloc(sizeof(struct ListNode));
dummy->next = head;
struct ListNode *prev = dummy;
struct ListNode *curr = head;
while (curr != NULL) {
if (curr->val == val) {
prev->next = curr->next;
free(curr);
curr = prev->next;
} else {
prev = curr;
curr = curr->next;
}
}
return dummy->next;
}
```
这样就能够实现删除链表中所有满足节点值等于 val 的节点,并返回新的链表头节点。
给定一个单链表的头节点head。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉
可以使用双指针的方法,一个指针指向当前节点,另一个指针指向当前节点的前一个节点。遍历链表,如果当前节点的值等于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;
}