c语言实现单链表的插入删除操作
时间: 2024-10-11 14:17:03 浏览: 38
在C语言中,单链表是一种常见的数据结构,常用于需要频繁插入和删除元素的场景。以下是单链表的一些基本操作:
1. **插入节点**:
- 插入到头结点前:创建新节点并将其指针指向当前头结点,然后将原头结点的指针更新为新节点。
```c
void insert_at_beginning(struct Node* *head, int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
if (!newNode) { /* 检查内存分配是否成功 */ }
newNode->data = data;
newNode->next = *head; // 新节点的next指向原头结点
*head = newNode; // 更新头结点指针
}
```
- 插入到指定位置:需要遍历找到目标位置,然后插入新节点。
```c
void insert_after(struct Node* head, int data, int position) {
if (position <= 0) return; // 避免除0索引的情况
struct Node* newNode = ...;
for (int i = 0; i < position - 1 && head != NULL; i++, head = head->next);
if (head == NULL) return; // 如果越界则插入失败
newNode->next = head->next;
head->next = newNode;
}
```
2. **删除节点**:
- 删除头结点:直接修改头结节点为头结节点的下一个节点。
```c
void delete_head(struct Node** head) {
if (*head == NULL) return; // 链表为空
struct Node* temp = *head;
*head = (*head)->next;
free(temp); // 释放已删除节点的内存
}
```
- 删除指定节点:遍历查找目标节点,然后调整前后节点的连接。
```c
void delete_node(struct Node** head, int key) {
struct Node* prev = NULL, *current = *head;
while (current != NULL && current->data != key) {
prev = current;
current = current->next;
}
if (current == NULL) return; // 节点未找到
if (prev == NULL) *head = current->next; // 删除头节点
else prev->next = current->next;
free(current); // 释放节点内存
}
```
阅读全文