Hello, please consider the structure and functions given below and the types defined. In the main function, when it enters the odd even function of the segmentation fault error. I'm not understanding why. Could someone help me, please?
#include <stdio.h>
#include <stdlib.h>
typedef struct cel {
int info;
struct cel * prox;
} celula;
typedef celula * apontador;
/*dado um apontador (lista) imprime o camp info recursivamente*/
void imprimeRec(apontador inicio) {
if (inicio != NULL) {
printf("%d\n", inicio->info);
imprimeRec(inicio->prox);
}
}
/*dada uma lisata ligada, insere um no no final*/
apontador insereNoFimRec(apontador inicio, int x) {
apontador novo;
if (inicio == NULL) {
novo = malloc(sizeof(celula));
novo->info = x;
novo->prox = NULL;
return novo;
}
inicio->prox = insereNoFimRec(inicio->prox, x);
return inicio;
}
/*recebe um int n e retorna um apaontador para uma lista ligada*/
apontador criaLista(int n) {
int i = 0;
int info;
apontador lista = NULL;
while (i < n) {
printf("L[%d] = ", i);
if (!scanf("%d", &info))
return NULL;
lista = insereNoFimRec(lista, info);
i++;
}
return lista;
}
void parImpar(apontador *par, apontador *impar, apontador inicio) {
apontador t1, t2;
t1 = t2 = NULL;
if ((inicio->info % 2) == 0)
*par = t1 = inicio;
else
*impar = t2 = inicio;
inicio = inicio->prox;
while (inicio != NULL) {
if ((inicio->info % 2) == 0) {
t1->prox = inicio;
t1 = t1->prox;
}
else {
t2->prox = inicio;
t2 = t2->prox;
}
inicio = inicio->prox;
}
t1 = t2 = NULL;
}
int main() {
int tamanho;
apontador lista, *par, *impar;
par = impar = NULL;
printf("Tamanho da lista: ");
if (!scanf("%d", &tamanho))
return 0;
lista = criaLista(tamanho);
imprimeRec(lista);
printf("Agora, vamos separar a ultima lista em numeros pares e impares\n");
parImpar(par, impar, lista);
printf("Par:\n");
imprimeRec(*par);
printf("Impar:\n");
imprimeRec(*impar);
return 0;
}