c语言请编写程序实现双向链表的建立、插入、删除的基本操作
时间: 2024-09-29 15:04:20 浏览: 47
在C语言中,双向链表是一种数据结构,每个节点包含一个值域和两个指针,分别指向前一个节点和后一个节点。下面是一个简单的实现,包括了双向链表的建立(初始化)、插入和删除的基本操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义双向链表节点结构体
typedef struct Node {
int data; // 节点值
struct Node* prev; // 指向前一个节点
struct Node* next; // 指向下一个节点
} Node;
// 创建一个新的双向链表节点
Node* createNode(int value) {
Node* newNode = (Node*) malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->prev = NULL;
newNode->next = NULL;
return newNode;
}
// 在链表末尾插入节点
void insertAtEnd(Node** head, int value) {
Node* newNode = createNode(value);
if (!newNode) return;
if (*head == NULL) {
*head = newNode;
} else {
newNode->prev = *head;
(*head)->next = newNode;
*head = newNode;
}
}
// 删除指定节点(按值查找)
void deleteNode(Node** head, int value) {
Node* current = *head;
while (current != NULL) {
if (current->data == value) {
if (current->prev != NULL)
current->prev->next = current->next;
else
*head = current->next;
if (current->next != NULL)
current->next->prev = current->prev;
free(current);
current = NULL;
break;
}
current = current->next;
}
}
// 打印链表
void printList(Node* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main() {
Node* head = NULL;
// 插入节点示例
insertAtEnd(&head, 1);
insertAtEnd(&head, 2);
insertAtEnd(&head, 3);
// 打印链表
printList(head);
// 删除节点示例
deleteNode(&head, 2);
// 再次打印链表
printList(head);
return 0;
}
```
这个程序首先创建一个空的双向链表,并演示如何在其末尾插入节点,以及按照值删除节点。注意在实际应用中,删除节点时需要处理边界情况,例如头节点或尾节点被删除的情况。
阅读全文
相关推荐


















