Hola
Estoy haciendo un programa en el cual tengo que agregar elementos a una lista, luego imprimir la lista y luego crear otra lista en el cual se rellene con los valores de la lista anterior de manera invertida.
El ejercicio parece simple. El problema es que yo uso la funcion pop, que tengo entendido que retorna el ultimo valor de la lista y no me esta retornando el ultimo elemento, sino que primero retorna el primero, luego el segundo y asi...
Dejo mi codigo, supongo que sera algo muy facil pero no le encuentro el defecto a las funciones que programe.
Estoy haciendo un programa en el cual tengo que agregar elementos a una lista, luego imprimir la lista y luego crear otra lista en el cual se rellene con los valores de la lista anterior de manera invertida.
El ejercicio parece simple. El problema es que yo uso la funcion pop, que tengo entendido que retorna el ultimo valor de la lista y no me esta retornando el ultimo elemento, sino que primero retorna el primero, luego el segundo y asi...
Dejo mi codigo, supongo que sera algo muy facil pero no le encuentro el defecto a las funciones que programe.
Código (c) [Seleccionar]
/*Ejercicio 5.6
Programar una función que invierta una lista de enteros. Considere que la lista puede estar vacía*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct s_nodo
{
int valor;
struct s_nodo*sig;
};
typedef struct s_nodo *t_nodo;
void agregar(t_nodo*,int);
void imprimirLista(t_nodo);
void invertirLista(t_nodo*,t_nodo*);
int pop(t_nodo*);
int main()
{
t_nodo lista=NULL;
t_nodo inversa=NULL;
agregar(&lista,1);
agregar(&lista,3);
agregar(&lista,5);
agregar(&lista,7);
printf("\nLista impresa = ");
imprimirLista(lista);
invertirLista(&lista,&inversa);
printf("\nLista inversa = ");
imprimirLista(inversa);
return 0;
}
void agregar(t_nodo* nodo,int valor)
{
if(*nodo==NULL)
{
*nodo=(t_nodo)malloc(sizeof(struct s_nodo));
if(*nodo==NULL)
return;
(*nodo)->valor=valor;
(*nodo)->sig=NULL;
}
else
agregar(&((*nodo)->sig),valor);
}
void imprimirLista(t_nodo lista)
{
while(lista!=NULL)
{
printf(" %d ",lista->valor);
lista=lista->sig;
}
}
void invertirLista(t_nodo *lista,t_nodo* inversa)
{
int valor;
while(*lista!=NULL)
{
valor=pop(lista);
agregar(inversa,valor);
}
}
int pop(t_nodo* nodo)
{
t_nodo aux=*nodo;
int valor=aux->valor;
*nodo=aux->sig;
free(aux);
return valor;
}