ВИ
Владимир Иванов

помогите, умоляю, с задачей по си

нужно написать программу которая удаляет число из списка всюду, где оно появляется.

например дан список

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);

}

СС
Сергей Серов

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)
{

А при каких условиях sec станет равна нулю? А станет ли?

Похожие вопросы
Помогите решить задачу на СИ!
Помогите решить задачу на СИ! ПлиззЗзз!
Помогите с задаче в СИ
Помогите решить задачу на языке Си
Помогите плиз решить задачу на СИ
помогите плиз написть задачу на Си
помогите плиз решить задачу на Си..
Помогите с задачей на Си
Помогите с задачей на СИ.
Задача на Си не "С++"