c语言单链表插入删除
时间: 2024-09-16 17:03:01 浏览: 64
C语言单链表实现多项式相加
在C语言中,单链表是一种动态数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。下面是关于单链表插入和删除的基本操作:
1. **插入操作**:
- **在头部插入**: 使用`malloc()`分配新节点,并将新节点的`next`指针设置为原头节点,然后将头节点的`next`指针指向新节点。
```c
void insert_at_start(struct Node **head, int data) {
struct Node *new_node = (struct Node *) malloc(sizeof(struct Node));
new_node->data = data;
new_node->next = (*head);
(*head) = new_node;
}
```
- **在指定位置插入**: 首先找到插入点前的节点,然后进行类似头部插入的操作。
```c
void insert_after(struct Node **prev_node, int data) {
if (*prev_node == NULL) {
printf("Previous node is null");
return;
}
struct Node *new_node = (struct Node *) malloc(sizeof(struct Node));
new_node->data = data;
new_node->next = (*prev_node)->next;
(*prev_node)->next = new_node;
}
```
2. **删除操作**:
- **删除首节点**: 如果链表非空,只需将头节点的`next`指针指向第二个节点。
```c
void delete_first(struct Node **head) {
if (*head != NULL) {
struct Node *temp = *head;
*head = (*head)->next;
free(temp);
} else {
printf("List is empty");
}
}
```
- **删除指定节点**: 找到待删除节点的前驱节点,然后更新其`next`指针跳过目标节点。
```c
void delete_node(struct Node **prev_node, struct Node *node) {
if (*prev_node == NULL) {
printf("Previous node is null");
return;
}
if (*prev_node->next == node) {
*prev_node->next = node->next;
} else {
struct Node *temp = node->next;
while (temp != NULL && temp != node) {
temp = temp->next;
}
if (temp == NULL) {
printf("Node not found");
} else {
temp->prev->next = temp->next;
}
}
free(node);
}
```
阅读全文