mam nastepujące pytanie, mam czesc kodu, który usuwa i dodaje elementy do listy dwukierunkowej, teraz chcialabym usunąc element który ma okreslona wartosc, nie wiem jak sie zabrac za to
#include <stdio.h>
#include <stdlib.h>
struct kolejka
{
int x;
struct kolejka *prev;
struct kolejka *next;
};
void wypisz(struct kolejka *a)
{
if(a==NULL)
{
printf("lista jest pusta\n");
}
do
{
printf("%d\n",a->x);
a=a->prev;
}
while(a!=NULL);
}
struct kolejka *push_front(struct kolejka *a, int z)
{
struct kolejka *tmp=(struct kolejka *)calloc(1,sizeof(struct kolejka));
tmp->x=z;
if (a==NULL)
{
tmp->prev=NULL;
tmp->next=NULL;
}
else
{
tmp->next=NULL;
tmp->prev=a;
a->next=tmp;
}
return tmp;
}
struct kolejka * pop_front(struct kolejka *a)
{
if (a==NULL)
{
printf("error:kolejka jest pusta\n");
return NULL;
}
else
{
struct kolejka *tmp;
tmp=a->prev;
free(a);
tmp->next=NULL;
return tmp;
}
}
struct kolejka *push_back(struct kolejka *a, int z)
{
struct kolejka *tmp=(struct kolejka *)calloc(1,sizeof(struct kolejka));
struct kolejka *tmp2;
tmp->x=z;
if (a==NULL)
{
tmp->prev=NULL;
tmp->next=NULL;
tmp2=tmp;
}
else
{
tmp2=a;
while(a->prev!=NULL)
a=a->prev;
tmp->next=a;
a->prev=tmp;
tmp->prev=NULL;
}
return tmp2;
}
struct kolejka * pop_back(struct kolejka *a)
{
struct kolejka *tmp;
tmp=a;
if (a==NULL)
{
printf("error:kolejka jest pusta\n");
return NULL;
}
else
{
while(a->prev!=NULL)
a=a->prev;
(a->next)->prev=NULL;
free(a);
}
return tmp;
}
int main(int argc, char **argv)
{
int i;
struct kolejka *lifo=NULL;
for(i=0;i<5;i++)
lifo=push_front(lifo, i);
wypisz(lifo);
for(i=0;i<3;i++)
lifo=pop_front(lifo);
wypisz(lifo);
struct kolejka *livo=NULL;
for(i=0;i<5;i++)
livo=push_back(livo, i);
wypisz(livo);
for(i=0;i<2;i++)
lifo=pop_back(livo);
wypisz(livo);
}