给我一个双向链表代码用C语言
时间: 2023-05-31 13:07:03 浏览: 89
以下是一个双向链表的基本实现,包括节点定义、创建、插入、删除和遍历等操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 双向链表节点定义
typedef struct node {
int data; // 数据
struct node* prev; // 前驱指针
struct node* next; // 后继指针
} Node;
// 创建节点
Node* create_node(int data) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->prev = NULL;
node->next = NULL;
return node;
}
// 插入节点
void insert_node(Node* head, Node* node) {
node->prev = head;
node->next = head->next;
if (head->next != NULL) {
head->next->prev = node;
}
head->next = node;
}
// 删除节点
void delete_node(Node* node) {
if (node == NULL) return;
if (node->prev != NULL) {
node->prev->next = node->next;
}
if (node->next != NULL) {
node->next->prev = node->prev;
}
free(node);
}
// 遍历链表
void traverse_list(Node* head) {
Node* p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
// 创建头节点
Node* head = create_node(0);
// 插入节点
insert_node(head, create_node(1));
insert_node(head, create_node(2));
insert_node(head, create_node(3));
// 遍历链表
traverse_list(head);
// 删除节点
delete_node(head->next);
// 遍历链表
traverse_list(head);
// 释放内存
free(head);
return 0;
}
```
阅读全文