Ciao...6 iscritto in informatica a Cagliari?
Io l avevo risolto così una settimana fa.....
Controllalo, spero possa servirti.....magari non è modo migliore ma funziona...
codice:
/*
Scrivere un programma che legge un vettore di interi e costruisce e stampa una
lista che contiene gli elementi negativi del vettore. Inserire nel programma
una funzione che inserisce DOPO ciascun elemento della lista un nuovo elemento
che contiene il valore doppio e positivo dell'elemento considerato.
Stampare la lista così ottenuta .
*/
#include <stdio.h>
#include <malloc.h>
typedef struct neg {
int info;
struct neg *next;
}*p;
typedef struct neg Neg;
Neg *crea_lista(Neg*,int);
void stampa(Neg*);
void ins(Neg*,int,int);
int dato,dove;
main(){ // MAIN
int v[5],i;
Neg *inizio=NULL;
Neg *in;
for(i=0;i<5;i++){printf("Scrivi 5 elementi negativi:\n\n");
scanf("%d",&v[i]);
if(v[i]<0) inizio=crea_lista(inizio,v[i]);
}
in=inizio;
stampa(inizio);
while (in){ //CHIAMATA FUNZ.INSERIMENTO
dove=in->info;
dato=-2*in->info;
ins(in,dove,dato);
in=in->next->next;
}
stampa(inizio);
fflush(stdin);
getchar();
}
Neg *crea_lista(Neg *inizio,int dato) //CREA LISTA
{
Neg *p;
p=(Neg*)malloc(sizeof(Neg));
p->info = dato;
p->next= inizio;
return(p);
}
void ins(Neg *in ,int dove,int dato) //INSERISCI
{
Neg *q, *aux;
q=(Neg*)malloc(sizeof(Neg));
q->info=dato;
q->next=NULL;
aux=in;
while ((aux->info != dove) && (aux))
aux=aux->next;
if(aux){
q->next=aux->next;
aux->next=q;
}
else printf("Elemento assente");
}
void stampa(Neg *inizio){ //STAMPA
while (inizio){
printf(" %d ",inizio->info);
inizio=inizio->next;
}
printf("\n\n");
}