用C语言讲解下如何删除线性链表中数据域为item的所有结点
时间: 2023-05-29 11:06:07 浏览: 87
删除线性链表中数据域为item的所有结点,可以分为以下几个步骤:
1. 遍历整个链表,找到所有数据域为item的结点。
2. 对于每个找到的结点,将其前驱结点的指针指向其后继结点,即跳过该结点,从而将该结点从链表中删除。
3. 重复步骤1和步骤2,直到所有数据域为item的结点都被删除为止。
具体实现可以使用如下代码:
```c
void deleteNodeByItem(Node **head, int item) {
Node *curr = *head;
Node *prev = NULL;
while (curr != NULL) {
if (curr->data == item) {
if (prev == NULL) {
// 如果要删除的结点是头结点
*head = curr->next;
free(curr);
curr = *head;
} else {
// 如果要删除的结点不是头结点
prev->next = curr->next;
free(curr);
curr = prev->next;
}
} else {
prev = curr;
curr = curr->next;
}
}
}
```
其中,head是指向链表头结点的指针,item是要删除的数据域的值。该函数使用两个指针curr和prev来遍历链表。当curr指向数据域为item的结点时,根据该结点是否是头结点来分别处理。如果是头结点,则更新head指针,否则更新该结点的前驱结点的指针。最后释放被删除的结点的内存,并将curr指向下一个结点。如果curr指向的结点的数据域不为item,则更新prev和curr指针继续遍历。
阅读全文