用c语言编写一个程序,实现双链表中结点的插入和删除操作
时间: 2024-09-23 10:13:14 浏览: 44
C语言实现单链表(带头结点)的基本操作
在C语言中,我们可以使用结构体和指针来实现双链表(Doubly Linked List)。这里我将简单地展示如何创建节点、插入新节点和删除节点的基本步骤。首先,我们需要定义一个链表节点结构:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* prev;
struct Node* next;
} Node;
// 插入节点函数
void insertNode(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->prev = NULL;
newNode->next = *head;
if (*head != NULL) {
(*head)->prev = newNode;
}
*head = newNode;
}
// 删除节点函数(考虑头结点和普通结点)
void deleteNode(Node** head, int value) {
Node* current = *head;
if (current != NULL && current->data == value) {
*head = current->next;
if (*head != NULL) {
(*head)->prev = NULL;
}
free(current);
return;
}
while (current != NULL && current->data != value) {
current = current->next;
}
if (current == NULL) {
return; // 节点未找到
}
Node* temp = current->prev;
temp->next = current->next;
if (current->next != NULL) {
current->next->prev = temp;
}
free(current);
}
int main() {
// 初始化链表为空
Node* head = NULL;
// 插入示例
insertNode(&head, 5); // 插入值为5的节点
insertNode(&head, 3); // 插入值为3的节点
// 删除示例
deleteNode(&head, 3); // 删除值为3的节点
deleteNode(&head, 5); // 删除值为5的节点
return 0;
}
```
在这个例子中,`insertNode` 函数负责在链表开头插入新的节点,而 `deleteNode` 函数用于从链表中查找并移除具有指定值的节点。
阅读全文