ho riscritto tutto praticamente deve eliminare dall'elemento i-esimo all'elemento n/2 + i n=numero elementi
ho fatto cosi.. però cancella pure il primo elemento.. o meglio dall'inizio fino alla fine questo tutto il codice
#include <stdio.h>
#include <stdlib.h>
struct list{
int c; //char c[2];
struct list *next;
};
typedef struct list *lista;
/*funzioni*/
lista crea(lista,int);/*crea lista conoscendo il numero di elementi da inserire*/
void stampa(lista);/*stampa la lista*/
lista new_list(lista,lista,int);/*crea la nuova lista eliminando gli elementi*/
void cancella(lista,lista);/*cancella gli elementi dalla prima lista alla seconda*/
int main(){
int ele;lista primo;
printf("Elementi da inserire --> ");
scanf("%d",&ele);
primo=crea(primo,ele-1);
//printf("ok creaton");
stampa(primo);
//printf("ok stampaton");
lista aus=primo,nuova;int j;
//printf("ok creata dichiarata nuova listan");
for (j=0;j<=(ele/2);j++)aus=aus->next; //scorre fino all'elemento (n/2)
//printf("ok aus scorso fino ad n/2 = %dn",(ele/2)-1);
nuova=new_list(primo,aus,(ele/2)-1);
//printf("ok creata la nuova listan");
stampa(nuova);
return 0;
}
lista crea(lista p, int i){
if(i>=0){
p=(lista)malloc(sizeof(lista));
printf("tInserisci l'elemento (carattere) %d --> ",i+1);
scanf("%d",&p->c);
p->next=crea(p->next,--i);
}else{
p=NULL;
}
return p;
}
void stampa(lista p){
if (p){
printf("%d --> ",p->c/*p->c[1]*/);
stampa(p->next);
}else{
printf("NULLn");
}
}
lista new_list(lista p,lista aus,int i){
if (i>=0){
if (p->c/*p->c[1]*/!=aus->c/*aus->c[1]*/){
lista t=p;/*t = temporanea*/
printf("valore da cancellare %dn",p->c);
p=aus->next;
cancella(t,aus);
}else{
printf("valore %dn",p->c);
p->next=new_list(p->next,aus->next,--i);
}
}
printf("Ritorno %dn",p->c);
return p;
}
void cancella(lista s,lista e){
if (s!=e){
cancella(s->next,e);
printf("cancello %dn",s->c);
free(s);
}else{
printf("cancello %dn",s->c);
free(s);
}
}
penso che l'errore sia in new_list....