链表删除一个劲节点C语言把指针域指向下一个
时间: 2024-12-19 08:09:51 浏览: 5
在C语言中,链表是一种常见的数据结构。链表由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。要删除链表中的一个节点,通常需要找到要删除节点的前一个节点,然后将前一个节点的指针域指向要删除节点的下一个节点。
以下是一个示例代码,演示如何在链表中删除一个节点:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
struct Node {
int data;
struct Node* next;
};
// 函数声明
void deleteNode(struct Node** head_ref, int key);
void append(struct Node** head_ref, int new_data);
void printList(struct Node* node);
int main() {
struct Node* head = NULL;
// 创建链表
append(&head, 1);
append(&head, 2);
append(&head, 3);
append(&head, 4);
printf("原链表: ");
printList(head);
// 删除节点值为3的节点
deleteNode(&head, 3);
printf("删除节点后的链表: ");
printList(head);
return 0;
}
// 删除节点函数
void deleteNode(struct Node** head_ref, int key) {
struct Node* temp = *head_ref;
struct Node* prev = NULL;
// 如果头节点本身就是要删除的节点
if (temp != NULL && temp->data == key) {
*head_ref = temp->next; // 改变头指针
free(temp); // 释放内存
return;
}
// 查找要删除的节点,保持对前一个节点的跟踪
while (temp != NULL && temp->data != key) {
prev = temp;
temp = temp->next;
}
// 如果未找到节点
if (temp == NULL) return;
// 从链表中删除节点
prev->next = temp->next;
free(temp); // 释放内存
}
// 追加节点函数
void append(struct Node** head_ref, int new_data) {
struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));
struct Node* last = *head_ref;
new_node->data = new_data;
new_node->next = NULL;
if (*head_ref == NULL) {
*head_ref = new_node;
return;
}
while (last->next != NULL)
last = last->next;
last->next = new_node;
}
// 打印链表函数
void printList(struct Node* node) {
while (node != NULL) {
printf("%d -> ", node->data);
node = node->next;
}
printf("NULL\n");
}
```
在这个示例中,`deleteNode`函数用于删除链表中值为`key`的节点。`append`函数用于在链表末尾追加新节点,`printList`函数用于打印链表。
阅读全文