面试时候出现过,想了好久-_-,好吧,补上。
链表:
typedef char DataType;
typedef struct Node //Node为结点类型名
{
DataType data; //data代表数据元素
struct Node *next; //next为指向下一结点的指针
}Node;
int ListDelete_All (Node *H, DataType item)
{
Node *p=H;
Node *t; //保存匹配的节点
int i=0; //保存删除节点的数量
while(p->next)
{
if(p->next->data==item) //如果匹配
{
t=p->next; //①t为被删除结点
p->next=t->next; //②删除t的链接关系
free(t); //③释放被删结点c++用delete;
i++; //④记录删结数目
}
else
p=p->next; //如果没匹配才指向下一个
}
return i;
}
函数功能:删除单向链表所有匹配的节点
参数:H为链表头、item为匹配的元素
返回:删除的节点数
TraverseList(head);//遍历
printf("%d\n",ListDelete(head,'c'));
TraverseList(head);
删除第一个节点简单一点。
int ListDelete_First (Node *H, DataType item)
{
Node *p=H;
Node *t; //保存匹配的节点
while( p->next )
{
if(p->next->data==item)
{
t=p->next; //①t为被删除结点
p->next=t->next; //②删除t的链接关系
free(t); //③释放被删结点
return 1; //成功返回1
}
p=p->next;
}
return 0;
}
其他功能就不附上了