给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。用C语言
时间: 2024-09-15 22:03:11 浏览: 39
在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;
}
```
阅读全文