用c语言实现单链表的删除,一整个代码
时间: 2024-10-13 10:17:34 浏览: 14
在C语言中,单链表的删除通常涉及到两个步骤:首先找到需要删除的节点,然后更新前一个节点的`next`指针以跳过该节点。这里是一个简单的单链表节点结构和删除节点函数的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
} Node;
// 创建新节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 删除指定值的节点
void deleteNode(Node** head, int value) {
Node* current = *head;
Node* previous = NULL;
while (current != NULL && current->data != value) {
previous = current;
current = current->next;
}
// 如果找到了要删除的节点
if (current != NULL) {
// 更新前一个节点的next指针
if (previous == NULL) {
*head = current->next; // 删除头节点
} else {
previous->next = current->next;
}
free(current); // 释放已删除节点的内存
} else {
printf("Element not found in the list.\n");
}
}
// 打印链表
void printList(Node* node) {
while (node != NULL) {
printf("%d -> ", node->data);
node = node->next;
}
printf("NULL\n");
}
int main() {
Node* head = createNode(1);
head->next = createNode(2);
head->next->next = createNode(3);
printf("Original list:\n");
printList(head);
deleteNode(&head, 2); // 删除值为2的节点
printf("\nAfter deleting element 2:\n");
printList(head);
return 0;
}
```
在这个例子中,`deleteNode`函数接收指向链表头节点的指针和要删除的值。注意这个代码假设链表不是空的,并且删除操作仅支持删除唯一的元素。如果链表中有多个相同的元素,这个版本的删除只会删除第一个遇到的。
阅读全文