c语言单链表怎么删除指定节点

avatar
作者
筋斗云
阅读量:0

C语言单链表删除指定节点的步骤如下:

  1. 首先,需要找到要删除的节点的前一个节点。
  2. 将前一个节点的next指针指向要删除节点的next指针,即跳过要删除的节点。
  3. 释放要删除的节点的内存空间。

具体实现如下:

#include <stdio.h> #include <stdlib.h>  // 定义链表节点结构体 typedef struct Node {     int data;           // 数据域     struct Node* next;  // 指针域 } Node;  // 删除指定节点 void deleteNode(Node* head, int value) {     Node* prev = head;          // 前一个节点     Node* current = head->next; // 当前节点      // 遍历链表,查找要删除的节点     while (current != NULL) {         if (current->data == value) {             break;         }         prev = current;         current = current->next;     }      // 当前节点为NULL,表示没有找到要删除的节点     if (current == NULL) {         printf("Node with value %d not found.\n", value);         return;     }      // 找到要删除的节点,删除     prev->next = current->next;     free(current); }  // 打印链表 void printList(Node* head) {     Node* current = head->next; // 从第一个节点开始打印      // 遍历链表,依次打印节点的数据     while (current != NULL) {         printf("%d ", current->data);         current = current->next;     }      printf("\n"); }  int main() {     // 创建链表 1->2->3->4->5     Node* head = (Node*)malloc(sizeof(Node));  // 头节点     Node* node1 = (Node*)malloc(sizeof(Node)); // 第一个节点     Node* node2 = (Node*)malloc(sizeof(Node)); // 第二个节点     Node* node3 = (Node*)malloc(sizeof(Node)); // 第三个节点     Node* node4 = (Node*)malloc(sizeof(Node)); // 第四个节点      head->next = node1;     node1->data = 1;     node1->next = node2;     node2->data = 2;     node2->next = node3;     node3->data = 3;     node3->next = node4;     node4->data = 4;     node4->next = NULL;      printf("Original list: ");     printList(head);      // 删除节点2     deleteNode(head, 2);      printf("List after deletion: ");     printList(head);      // 释放内存     free(node4);     free(node3);     free(node2);     free(node1);     free(head);      return 0; } 

以上代码中,首先创建了一个包含5个节点的链表,然后调用deleteNode()函数删除了节点2,最后打印链表,输出结果为:

Original list: 1 2 3 4  List after deletion: 1 3 4  

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!