Ho questo codice che inserisce in una lista i valori e successivamente dovrebbe aggiungere 0 dopo tutti i valori dispari.
Il problema è che inserisce zero dopo tutti i valori indiscriminatamente.
Sapreste correggermi per favore. Grazie
codice:
#include "stdafx.h"
#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 :\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 = 0 * 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");
}