移除链表元素
cpp
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val) {
// 创建一个虚拟头节点,以处理头节点可能被删除的情况
struct ListNode *dummy = (struct ListNode*)malloc(sizeof(struct ListNode)); // 分配内存给 dummy 节点
if (dummy == NULL) {
return NULL; // 内存分配失败
}
dummy->val = 0;
dummy->next = head;
struct ListNode *pre = dummy;
struct ListNode *cur = head;
while (cur != NULL) {
if (cur->val == val) {
// 删除当前节点
pre->next = cur->next;
free(cur); // 释放当前节点的内存,因为不再需要这个节点
cur = pre->next; // 移动 cur 到下一个节点
} else {
// 如果不删除当前节点,则继续遍历
pre = cur;
cur = cur->next;
}
}
// 返回新的头节点(跳过虚拟头节点)
struct ListNode *new_head = dummy->next;
free(dummy); // 释放虚拟头节点的内存
return new_head;
}