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:
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.
Código (c) [Seleccionar]
#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.