funkcja usuwająca liczby parzyste z listy

0
struct el
    {
    int liczba;
    struct el *nast;
    struct el *poprz;
    };

typedef struct el elListy;
typedef elListy *lista;


void usun_element(lista *element)
{
    if((*element)==NULL)
        return;
    else if((*element)->nast==NULL && (*element)->poprz==NULL)
    {
        free(*element);
        return;
    }
    else if((*element)->poprz==NULL)
    {
        (*element)=(*element)->nast;
        (*element)->poprz=NULL;
    }
    else
    {        
        (*element)->nast=(*element)->poprz->nast;
        return;
    }


}

void usun_parzyste(lista *element)
{
    while((*element)!=NULL)
    {
        if(((*element)->liczba)%2==0)
            usun_element(&(*element));
        else
            (*element)=(*element)->nast;
    }
} 
 

program nie może się wykonać trochę nad nim już dzisiaj siedzę ale nie widzę gdzie tkwi problem :D dajcie jakieś sugestie nie gotowe kody :D z góry dzięki

0

Przy takiej konstrukcji listy i funkcji jest to wręcz nie możliwe.
Użyj coś na kształt:

#include <stdio.h>
#include <stdlib.h>

struct node
  {
   int value;
   struct node *prev,*next;
  };

typedef struct
  {
   struct node *head,*tail;
  }List;

struct node *NewNode(int value,struct node *prev,struct node *next)
  {
   struct node *ret;
   ret=(struct node*)malloc(sizeof(struct node));
   ret->value=value;
   ret->prev=prev;
   ret->next=next;
  }

void Add(List *L,int value)
  {
   struct node *tmp;
   tmp=NewNode(value,L->tail,NULL);
   if(L->tail) L->tail->next=tmp;
   else L->head=tmp;
   L->tail=tmp;
  }
  
void Show(List *L)
  {
   struct node *i;
   for(i=L->head;i;i=i->next) printf(" %d",i->value);
   printf("\n");
  }
  
void Del(List *L,struct node *del)
  {
   if(del->prev) del->prev->next=del->next;
   else L->head=del->next;
   if(del->next) del->next->prev=del->prev;
   else L->tail=del->prev;
  }
  
void DelEven(List *L)
  {
   struct node *tmp,*next;
   tmp=L->head;
   while(tmp)
     {
      next=tmp->next;
      if(!(tmp->value&1)) Del(L,tmp);
      tmp=next;
     }
  }
  
int main()
  {
   int i;
   List L={NULL,NULL};
   for(i=0;i<10;++i) Add(&L,i);
   printf("Przed:\n");
   Show(&L);
   DelEven(&L);
   printf("Po:\n");
   Show(&L);
   return 0;
  }

Powyższy kod działa, sprawdziłem na 3-ch kompilatorach.
Może ktoś się zorientuje czemu to http://ideone.com/sDFOHh nie działa (funkcha Show() nie wyświetla nic).

1 użytkowników online, w tym zalogowanych: 0, gości: 1