c语言双向链表如何删除节点

avatar
作者
猴君
阅读量:0

删除双向链表中的节点需要考虑以下几种情况:

  1. 删除头节点:如果要删除的节点是头节点,需要将头节点指针指向下一个节点,并释放原来的头节点内存。

  2. 删除尾节点:如果要删除的节点是尾节点,需要将尾节点的前一个节点的next指针指向NULL,并释放原来的尾节点内存。

  3. 删除中间节点:如果要删除的节点是中间节点,需要将该节点的前一个节点的next指针指向该节点的下一个节点,同时将该节点的下一个节点的prev指针指向该节点的前一个节点,并释放原来的节点内存。

下面是一个示例代码,用来删除双向链表中的某个节点:

#include <stdio.h> #include <stdlib.h>  typedef struct Node {     int data;     struct Node* prev;     struct Node* next; } Node;  Node* deleteNode(Node* head, Node* node) {     if (head == NULL || node == NULL) {         return head;     }      if (head == node) {         head = node->next;     }      if (node->prev != NULL) {         node->prev->next = node->next;     }      if (node->next != NULL) {         node->next->prev = node->prev;     }      free(node);          return head; }  int main() {     Node* head = NULL;     Node* node1 = (Node*)malloc(sizeof(Node));     Node* node2 = (Node*)malloc(sizeof(Node));      head = node1;     node1->data = 1;     node1->prev = NULL;     node1->next = node2;      node2->data = 2;     node2->prev = node1;     node2->next = NULL;      head = deleteNode(head, node1);      Node* current = head;     while (current != NULL) {         printf("%d\n", current->data);         current = current->next;     }      return 0; } 

在上面的示例代码中,deleteNode函数用来删除双向链表中的某个节点,main函数创建了一个双向链表并删除了其中的一个节点。

广告一刻

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