编写单链表的删除操作函数
时间: 2024-09-11 11:10:47 浏览: 42
单链表的插入删除 遍历等操作
在编写单链表的删除操作函数时,我们需要考虑两种基本情况:删除的是链表的头部节点还是中间或尾部的节点。以下是一个简单的删除节点的函数示例,假设链表节点的结构如下:
```c
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
```
删除节点的函数实现可以是这样的:
```c
// 函数作用:删除链表中值为val的节点
// 参数:链表的头指针head,要删除节点的值val
// 返回值:操作完成后的链表头指针
ListNode* deleteNode(ListNode* head, int val) {
// 如果链表为空,直接返回NULL
if (head == NULL) {
return NULL;
}
// 如果要删除的节点是头节点
if (head->val == val) {
ListNode* temp = head;
head = head->next;
free(temp); // 释放原头节点的内存
return head;
}
// 遍历链表,找到要删除节点的前一个节点
ListNode* current = head;
while (current->next != NULL && current->next->val != val) {
current = current->next;
}
// 如果找到了要删除的节点,进行删除操作
if (current->next != NULL) {
ListNode* temp = current->next;
current->next = temp->next;
free(temp); // 释放要删除节点的内存
}
return head;
}
```
这段代码中,首先判断头节点是否是要删除的节点,如果是,则直接将头指针指向下一个节点,并释放原头节点的内存。如果不是头节点,那么就需要遍历链表,找到要删除节点的前一个节点,然后通过改变指针来实现删除操作,并释放要删除节点的内存。
阅读全文