Devo fare questo esercizio:
Si implementi una lista concatenata che contenga, come dati, interi positivi.
Si implementino anche tre funzioni per:
-Aggiungere un elemento in fondo alla lista;
-Aggiungere un elemento in cima alla lista;
Dato un valore positivo "v", eliminare la prima occorrenza di v nella lista(non modicare la lista nel caso che non contenga v).
Quindi, scrivere un programma che legga degli interi.
Per ogni intero letto(e nello stesso ordine dell'input), si applichi una delle seguenti modiche:
-Se il valore lettove strettamente negativo, rimuovere il primo elemento uguale a "v" dalla lista (non modicare la lista nel caso che questa non lo contenga);
-Se il valore lettove positivo e pari, aggiungerlo in cima alla lista;
-Se il valore lettove positivo e dispari, aggiungerlo in fondo alla lista;
-Se il valore letto e 0, terminare l'esecuzione del programma stampando gli elementi della lista.
io ho fatto questo codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct nod {
int info;
struct nod *next;
}nodo;
void addc (nodo **lis,int v){
nodo *neo=malloc(sizeof(nodo));
neo->next=*lis;
neo->info=v;
*lis=neo;
}
void addf (nodo *lis, int v){
while ((lis->next)!=NULL){
lis=lis->next;
}
lis->next=malloc(sizeof(nodo));
lis->next->info=v;
lis->next->next=NULL;
}
void del (nodo *lis, int v){
nodo *temp=malloc(sizeof(nodo));
int t=0;
if (lis->info==v){
temp=lis->next;
free(lis);
lis=temp;
}else{
while (lis->next->info!=v){
lis=lis->next;
if (lis->next==NULL){
break;
}
if (lis->next->info==v){
t=1;
}
}
if (t==1){
if (lis->next->next!=NULL){
temp=lis->next->next;
free(lis->next);
lis->next=temp;
}else{
lis->next=NULL;
}
}
}
}
int main (){
nodo *lis=malloc(sizeof(nodo));
int v;
scanf("%d",&v);
if (v>0){
lis->info=v;
lis->next=NULL;
}
while(v!=0){
scanf("%d",&v);
if (((v%2)==0)&&(v>0)){
addc(&lis,v);
}else if(((v%2)!=0)&&(v>0)){
addf(lis,v);
}else if (v<0){
v=-v;
del(lis,v);
}
}
while(lis!=NULL){
printf("%d\n",lis->info);
lis=lis->next;
}
return 0;
}
Ho due problemi:
-non mi cancella i numeri positivi (es. se c'è 2 e poi in input do -2 non me lo cancella)
-non riesco a cancellare il primo elemento della lista sia positivo sia negativo e in output mi da una lista infinita di numeri strani
AIUTATEMI VI PREGO tra un po' ho l'esame e vorrei essere pronto su tutto al 100%
grazie in anticipo.