C语言双向链表的插入和删除
时间: 2023-09-25 18:15:53 浏览: 91
C语言 双向链表操作,普通双向和循环双向
双向链表的插入和删除操作相对于单向链表要复杂一些,因为需要同时处理前驱和后继节点的指针。以下是双向链表的插入和删除的示例代码:
双向链表的结构体定义:
```c
struct Node {
int data;
struct Node* prev;
struct Node* next;
};
```
双向链表的插入:
```c
void insert(struct Node** head_ref, int new_data) {
struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));
new_node->data = new_data;
new_node->prev = NULL;
new_node->next = (*head_ref);
if ((*head_ref) != NULL) {
(*head_ref)->prev = new_node;
}
(*head_ref) = new_node;
}
```
双向链表的删除:
```c
void delete(struct Node** head_ref, struct Node* del_node) {
if (*head_ref == NULL || del_node == NULL) {
return;
}
if (*head_ref == del_node) {
*head_ref = del_node->next;
}
if (del_node->next != NULL) {
del_node->next->prev = del_node->prev;
}
if (del_node->prev != NULL) {
del_node->prev->next = del_node->next;
}
free(del_node);
}
```
在双向链表中,插入操作的时间复杂度为 O(1),删除操作的时间复杂度也为 O(1)。
阅读全文