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");
}