C语言向函数传递一个一级指针,直接删除该节点
时间: 2024-02-12 21:05:59 浏览: 56
C语言实现输出链表中倒数第k个节点
5星 · 资源好评率100%
对于一个单链表,如果要删除某个节点,需要找到该节点的前一个节点,然后修改前一个节点的指针域,使其指向该节点的下一个节点。如果要通过函数实现该功能,可以向函数传递一个指向头节点指针的一级指针,然后在函数内部遍历链表找到要删除的节点,并修改前一个节点的指针域。
以下是一个示例代码:
```c
struct ListNode {
int val;
struct ListNode *next;
};
void deleteNode(struct ListNode **head, int val) {
struct ListNode *p = *head;
struct ListNode *prev = NULL;
while (p != NULL && p->val != val) {
prev = p;
p = p->next;
}
if (p == NULL) {
// 没有找到要删除的节点
return;
}
if (prev == NULL) {
// 要删除的节点是头节点
*head = p->next;
} else {
prev->next = p->next;
}
free(p);
}
```
在函数内部,先定义两个指针变量 `p` 和 `prev`,分别指向当前节点和前一个节点。然后遍历链表,查找要删除的节点。如果找到了,就判断该节点是否是头节点。如果是头节点,则修改头节点指针;否则,修改前一个节点的指针域。最后释放要删除的节点的内存空间。需要注意的是,由于要修改头节点指针,因此需要将一级指针传递给函数。
阅读全文