单链表的插入与删除操作c语言
时间: 2024-11-22 16:44:00 浏览: 18
单链表是一种线性的数据结构,其中的元素通过节点链接在一起,每个节点包含数据域和指针域。在C语言中,对单链表进行插入和删除操作通常涉及以下几个步骤:
**插入操作**:
1. **在头部插入**: 创建一个新的节点,将新节点的数据设置为给定值,然后将其头指针指向新节点,同时更新原头节点的头指针。
```c
void insertAtStart(struct Node** head, int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
```
2. **在特定位置插入**: 遍历找到目标位置,插入新节点,并调整相邻节点的指针。
```c
void insertAfter(struct Node** head, int prevData, int newData) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = newData;
newNode->next = (*head)->next;
if ((*head)->data == prevData) {
newNode->next = head;
} else {
struct Node* current = *head;
while (current->next && current->next->data != prevData) {
current = current->next;
}
if (!current->next)
printf("Node not found");
else
current->next = newNode;
}
}
```
**删除操作**:
1. **删除头部节点**: 如果链表非空,则直接修改头指针指向下一个节点。
```c
void deleteHead(struct Node** head) {
if (*head != NULL) {
struct Node* temp = *head;
*head = (*head)->next;
free(temp);
} else
printf("List is empty");
}
```
2. **删除指定节点**: 需要遍历查找目标节点,然后更新前一个节点的`next`指针。
```c
void deleteNode(struct Node** head, int key) {
struct Node* temp = *head, *prev;
if (temp != NULL && temp->data == key) {
*head = temp->next;
free(temp);
return;
}
while (temp != NULL && temp->data != key) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) return; // 节点未找到
prev->next = temp->next;
free(temp); // 释放已找到的节点
}
```
阅读全文