C语言单链表删除包含某个值的所有节点
/*
删除包含某个值得所有节点,思路遍历计算出该值 出现的次数,然后写个大循环在里面处理值所在的节点在头部,中间,尾部的情况
*/
struct llist_node* llist_delete(struct llist_node* head, int value)
{
struct llist_node* tmp = head;
struct llist_node* ptr = head;
int number = 0;
while (ptr)
{
if (ptr->value==value)
{
++number;
}
ptr = ptr->next;
}
while (number--)
{
if (tmp->value==value)
{
struct llist_node* tmp1 = tmp;
tmp = tmp->next;
free(tmp1);
head = tmp;
}
else
{
struct llist_node* tmp = head;
while (tmp)
{
if (tmp->next!=NULL)
{
if (tmp->next->value==value)
{
struct llist_node* tmp1 = NULL;
tmp1 = tmp->next->next;
free(tmp->next);
tmp->next = tmp1;
tmp = tmp->next;
}
else
{
tmp = tmp->next;
}
}
else
{
break;
}
}
}
}
return head;
}
验证结果: