Lista simple -- Error

Iniciado por eduardo1012, 17 Noviembre 2016, 03:19 AM

0 Miembros y 1 Visitante están viendo este tema.

eduardo1012

Buenas, mi duda surge al querer hacer una lista y mandarle los parámetros de primero y ultimo, a una función, la cual es invocada previamente. Algo como esto:
#include<iostream>//cout, cin, fixed, endl
#include<iomanip>//setw, setprecision,
#include<stdlib.h>//malloc, free
#include<conio.h>
using namespace std;

typedef struct _nodo{
int num;
char nombre[10];
struct _nodo *siguiente;
}tipoNodo; //variable
typedef tipoNodo *pNodo;

void mostrar_lista(pNodo *primero, pNodo *ultimo);
void agregar_elemento(pNodo *primero, pNodo *ultimo);
void borrar_elemento(pNodo *primero, pNodo *ultimo);
void funcion();

main(){
pNodo primero = NULL, ultimo=NULL;

funcion();

}

void funcion(){


for(int i=0; i<5; i++){
agregar_elemento(&primero, &ultimo);
}
mostrar_lista(&primero, &ultimo);
}

void agregar_elemento(pNodo *primero, pNodo *ultimo){
pNodo nuevo;
system("cls");

nuevo = (pNodo)malloc(sizeof(tipoNodo));
cout<<"Dato: ";
cin>>nuevo->num;
cin>>nuevo->nombre;
//nuevo->siguiente=NULL;

if(*primero==NULL){
//agrego l?nea
nuevo->siguiente=nuevo;

*primero = nuevo;
*ultimo = nuevo;
}else{
//agrego l?nea
nuevo->siguiente=*primero;

(*ultimo)->siguiente=nuevo;
*ultimo=nuevo;
}
getchar();
}

void mostrar_lista(pNodo *primero, pNodo *ultimo){
pNodo auxiliar, auxiliar2;
auxiliar = *primero;
auxiliar2 = *primero;
system("cls");
cout<<"Mostrando la lista completa"<<endl;
if(primero==NULL){
cout<<"No hay elementos en la lista";
}else{
while(auxiliar!=NULL){
cout<<auxiliar->num<<" "<<auxiliar->nombre<<endl;
auxiliar = auxiliar->siguiente;

if (auxiliar2->siguiente == auxiliar->siguiente){
auxiliar=NULL;
}
}
}
getchar();
}

void borrar_elemento(pNodo *primero, pNodo *ultimo){
pNodo temporal, temporal2, previo, actual;
int n_borrar;
system("cls");
if(primero==NULL){
cout<<"No hay elementos en la lista";
}else{
cout<<"Dame el valor a borrar de la lista"<<endl;
cin>>n_borrar;
temporal=*primero;
temporal2=*primero;
if(n_borrar == (*primero)->num){
*primero=(*primero)->siguiente;
//agrego l?nea
(*ultimo)->siguiente =*primero;

free(temporal);
cout<<"Elemento borrado: "<<n_borrar<<endl;
}
else{
previo=*primero;
actual=temporal->siguiente;
while(actual !=NULL && actual->num!=n_borrar){
previo=actual;
actual=actual->siguiente;
}
if(actual!=NULL){
temporal=actual;
previo->siguiente=actual->siguiente;
free(temporal);
cout<<"El elemento borrado fue: "<<n_borrar;
}
}
}
}

Donde primero y ultimo, no son declarados previamente y no encuentro solución al problema. Sé que esa función llamada "función" no me sirve de nada y que lo mejor es no ponerla, pero en el proyecto que hago dicha función hace algo.