用 c 语言描述带头结点双向链表的插入和删除算法,
时间: 2024-09-23 16:15:12 浏览: 47
在C语言中,我们可以使用结构体来表示双向链表节点,并提供相应的插入和删除操作。这里我会给出基本的头节点(Head)的插入和删除函数:
```c
// 定义双向链表节点结构体
typedef struct Node {
int data;
struct Node* prev; // 指向前一个节点
struct Node* next; // 指向后一个节点
} Node;
// 插入新节点到链表头部
void insertAtBegin(Node** head, int data) {
// 创建新节点
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = data;
newNode->prev = NULL;
newNode->next = *head;
// 更新头节点指针
if (*head != NULL) {
(*head)->prev = newNode;
}
*head = newNode;
}
// 删除指定节点
void deleteNode(Node** head, int key) {
Node* temp = *head, *prev = NULL;
// 查找要删除的节点
while (temp != NULL && temp->data != key) {
prev = temp;
temp = temp->next;
}
// 如果找到节点,则删除
if (temp != NULL) {
if (prev == NULL) { // 节点为头节点
*head = temp->next;
if (*head != NULL) {
(*head)->prev = NULL;
}
} else {
prev->next = temp->next;
if (temp->next != NULL) {
temp->next->prev = prev;
}
}
free(temp); // 释放内存
} else {
printf("Element not found in the list.\n");
}
}
```
阅读全文