单链表的插入和删除c语言
时间: 2024-09-24 10:02:58 浏览: 49
单链表是一种线性数据结构,它由节点组成,每个节点包含数据元素和指向下一个节点的指针。在C语言中,插入和删除操作主要有以下步骤:
**插入操作**:
1. 创建新节点:首先,你需要创建一个新的节点,给它赋值,并设置它的`next`指针为`NULL`。
2. 找到插入位置:确定新节点应插入到现有链表的哪一点,这通常需要遍历链表找到目标位置。
3. 插入节点:将新节点的`next`指针指向当前节点的`next`,然后更新前一个节点的`next`为新节点。
示例代码(在链表头部插入):
```c
struct Node* insertAtHead(struct Node* head, int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = head;
head = newNode; // 更新头节点
return head;
}
```
**删除操作**:
1. 查找节点:确定要删除的节点,可以通过遍历链表或使用已知的节点地址查找。
2. 分离链接:如果要删除的是头节点,只需改变头节点的指向;如果不是,则找到待删除节点的前一个节点,将其`next`指向下一个是删除节点的`next`。
3. 释放内存:如果删除的节点不是最后一个节点,记得释放其内存。
示例代码(删除指定值的节点):
```c
void deleteNode(struct Node** head, int key) {
struct Node* temp = *head, *prev;
if (temp && temp->data == key) {
*head = temp->next; // 删除头节点
free(temp); // 释放头节点
return;
}
while (temp && temp->data != key) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) return; // 没有找到
prev->next = temp->next; // 将前一个节点的next指向待删节点的后一个
free(temp); // 释放要删除的节点内存
}
```
阅读全文