Título: Invertir una Lista en C - La funcion Pop no me da el ultimo elemento.? Publicado por: palacio29 en 26 Octubre 2016, 01:09 am 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. Código
Título: Re: Invertir una Lista en C - La funcion Pop no me da el ultimo elemento.? Publicado por: MAFUS en 26 Octubre 2016, 19:44 pm El problema es que tu lista crece por el final pero quitas por el principio.
Título: Re: Invertir una Lista en C - La funcion Pop no me da el ultimo elemento.? Publicado por: palacio29 en 27 Octubre 2016, 00:20 am El problema es que tu lista crece por el final pero quitas por el principio. Y como puedo hacer que el POP tome el ultimo elemento? Si mi lista es 3 - 5 -7 -9 Yo quiero sacar el 9, luego el 7, luego el 5 y asi sucesivamente pero nose como empezar desde el final e ir para el principio, solo se ir desde el comienzo hasta el final. Título: Re: Invertir una Lista en C - La funcion Pop no me da el ultimo elemento.? Publicado por: MAFUS en 27 Octubre 2016, 01:01 am Tendrías que mirar si (*nodo)->sig->sig vale NULL para sacar el valor de (*nodo)->sig->valor. Después hacer un free sobre (*nodo)->sig para terminar llevando a NULL (*nodo)->sig. Como puedes ver es muy complicado.
Te sería mucho más fácil cambiar la función agregar para hacer de tu lista una pila. El último objeto que entres debe estar en cabeza. Tu función pop quedaría tal y como la tienes. Para tu función agregar (por conveniencia sería mejor que la llamaras push): La función debe recibir un puntero a la lista y el valor a añadir. Dentro: creas una variable auxiliar de tipo nodo. Como valor le das el valor que te han pasado a la función. Como siguiente elemento apuntas a la lista. Haces que la raíz de la lista que te han pasado como argumento apunte al nodo auxiliar. Listo, ya tienes tu programa funcional. |