c语言链表删除节点
时间: 2023-08-25 19:15:57 浏览: 44
链表删除节点的基本步骤如下:
1. 遍历链表,找到要删除的节点,并记录其前一个节点的位置。
2. 将前一个节点的 next 指针指向要删除节点的下一个节点。
3. 释放要删除的节点的内存空间。
以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
void deleteNode(Node **head, int val) {
Node *currNode = *head;
Node *prevNode = NULL;
// 找到要删除的节点和其前一个节点
while (currNode != NULL && currNode->data != val) {
prevNode = currNode;
currNode = currNode->next;
}
// 如果找到了要删除的节点
if (currNode != NULL) {
// 如果要删除的节点是头节点
if (prevNode == NULL) {
*head = currNode->next;
} else {
prevNode->next = currNode->next;
}
// 释放要删除的节点的内存空间
free(currNode);
}
}
int main() {
// 创建链表 1 -> 2 -> 3 -> 4 -> 5
Node *head = malloc(sizeof(Node));
head->data = 1;
Node *currNode = head;
for (int i = 2; i <= 5; i++) {
Node *newNode = malloc(sizeof(Node));
newNode->data = i;
currNode->next = newNode;
currNode = newNode;
}
// 删除节点 3
deleteNode(&head, 3);
// 遍历链表,输出剩余节点
currNode = head;
while (currNode != NULL) {
printf("%d ", currNode->data);
currNode = currNode->next;
}
return 0;
}
```