给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 node.val == val 的节点,并返回 新的头节点 。
时间: 2023-05-03 20:02:44 浏览: 105
这道题要求我们给出一个链表的头节点 head 和一个整数 val,在链表中删除所有值等于 val 的节点,并返回新的头节点。
具体做法为遍历整个链表,如果节点的值等于 val,就将该节点从链表中删除。最后返回修改后的头节点即可。
相关问题
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。用C语言
在C语言中,你可以通过遍历链表的方式来删除满足条件的节点。下面是一个简单的函数示例,它接受一个链表头节点`head`和一个目标值`val`,然后创建一个新的链表,其中不包含等于`val`的节点:
```c
#include <stdlib.h> // 包含链表操作相关的库
// 定义链表节点结构体
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
ListNode* removeElements(ListNode* head, int val) {
if (head == NULL || head->val != val) { // 如果链表为空或头节点不满足条件,直接返回
return head;
}
// 创建新的头节点和指针
ListNode* new_head = malloc(sizeof(ListNode)); // 分配内存
new_head->val = head->val; // 设置新头的初始值
new_head->next = head->next;
// 遍历原链表,跳过满足条件的节点
ListNode* current = head->next;
while (current != NULL) {
if (current->val == val) {
ListNode* temp = current;
current = current->next;
free(temp); // 释放当前节点
} else {
new_head->next = current; // 更新新链表的下一个节点
new_head = current; // 移动new_head到下一个非目标节点
current = current->next;
}
}
return new_head;
}
```
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 的节点,并返回新的链表头节点。
阅读全文