6-5 单链表 - 19. 按值删除
分数 10
作者 李祥
单位 湖北经济学院
请编写函数,删除线性表中所有与指定值相同的数据元素。
函数
void LListRemoveValue(LLIST *list, const LELEMENT *element);
说明:参数 list
是指示线性表(单链表)的指针,element
是指向数据元素的指针。函数将删除线性表中所有与指定值相同的数据元素。
修改主函数,对以上函数进行测试。
int main() {
LELEMENT x;
LLIST a;
LListCreate(&a);
LListInput(&a);
LElementInput(&x);
LListRemoveValue(&a, &x);
LListOutput(&a);
putchar('\n');
LListDestroy(&a); return 0; }
输入样例
( 2.8, 4.7, 5.2, 2.8, 3.6, 2.8, 2.8, 5.2, 7.2, 2.8 )
2.8
输出样例
( 4.7, 5.2, 3.6, 5.2, 7.2 )
这道题题面缺结构定义,补充如下:
typedef struct _LNODE_
{
LELEMENT data;
struct _LNODE_ *next;
} LNODE;
typedef struct
{
int length;
LNODE *head;
} LLIST;
还需要补充一个比较数据域的函数
int LElementEq(const LELEMENT *x, const LELEMENT *y);
void LListRemoveValue(LLIST *list,const LELEMENT *element)
{
struct _LNODE_ *head1=list->head,*recard=NULL;
while(head1!=NULL)
{
if(LElementEq(&(head1->data),element))
{
if(head1==list->head)
list->head=list->head->next ;
else{
recard->next=head1->next;
free(head1);
head1=recard;
}
list->length--;
}
recard=head1;
head1=head1->next;
}
}