помогите, умоляю, с задачей по си
нужно написать программу которая удаляет число из списка всюду, где оно появляется.
например дан список
1->2->3->2->5
число для удаления 2
после этого список должен быть:
1->3->5
список должен быть одинарный
функция Del которая делает это -падает, в чем ошибка, есть ли какой нить другой путь?
#include
#include
struct Item
{
int data;
struct Item *next;
};
void FREE(struct Item *headptr)
{
if(headptr==NULL)
return;
FREE(headptr->next);
free(headptr);
}
void Print(struct Item *s)
{
if(s==NULL)
return;
printf("%d-> ",s->data);
Print(s->next);
}
void addFirst(struct Item **hp,int dt)
{
struct Item *temp;
temp=(struct Item*)malloc(sizeof(struct Item));
if(!temp)
{
exit(1);
}
temp->data=dt;//fill the field by number
temp->next=(*hp);//new value in head points to next
(*hp)=temp;//headpointer points to new value
}
void add(struct Item **hp,int dt)
{
struct Item *move=(*hp);//new value saves an address of pointer to list
struct Item *newitem;//new value
newitem=(struct Item*)malloc(sizeof(struct Item));
if(!newitem)
{
exit(1);
}
newitem->data=dt;//put new value to field newitem points on it
while(move->next!=NULL)
{
move=move->next;
}
newitem->next=move->next;//new pointer points to value that previous pointred
move->next=newitem;//the value before new value will point to new value
}
void Del(struct Item **hp,int dt,int num)
{
struct Item *fist=*hp;
struct Item *sec=fist->next,*tmp;
int del=0;
while(sec!=NULL)
{
if(fist->data==dt)
while(fist->data==dt)
{
tmp=fist;
(*hp)=sec;
free(tmp);
fist=(*hp);
sec=fist->next;
del++;
}
if(sec->data==dt)
while(sec->data==dt)
{
tmp=sec;
sec=sec->next;
fist->next=sec;
free(tmp);
del++;
}
else
{
fist=fist->next;
sec=sec->next;
}
}
if(fist->data==dt)
{
tmp=fist;
(*hp)=sec;
free(tmp);
fist=(*hp);
sec=fist->next;
del++;
}
printf("Deleted %d\n",del);
printf("remained %d\n",num-del);
}
void main()
{
struct Item *head=NULL;
int i,dt,res,num=5,*arr;
for(i=0;i
{
printf("enter number...:\n");
scanf("%d",&dt);
if(head==NULL)
{
addFirst(&head,dt);
}
else
{
add(&head,dt);
}
}
printf("Enter number to delete:\n");
scanf("%d",&dt);
Del(&head,dt,num);
Print(head);
}