Estoy pasando un código de funciones que permiten agregar y eliminar elementos de una lista enlazada hacia "C" sin embargo me encontré con algo que no sé como reemplazar al declarar la función: void insertarLista(Nodo *&lista,int n)
el "&" la referencia de la lista al quitarlo no hay error de sintaxis pero no funciona como debe de ser al emplear otra funcion "mostrar".
Este es el código en C++
#include <iostream>
using namespace std;
struct Nodo{
int dato;
Nodo *siguiente;
};
void insertarLista(Nodo *&,int);
int main(int argc, char *argv[]) {
Nodo *lista = NULL;
int dato;
cout<<"Digite un numero: ";
cin>>dato;
insertarLista(lista,dato);
return 0;
}
void insertarLista(Nodo *&lista,int n){
Nodo *nuevo_nodo = new Nodo();
nuevo_nodo->dato = n;
Nodo *aux1 = lista;
Nodo *aux2;
while((aux1 != NULL) && (aux1->dato <n)){
aux2 = aux1;
aux1 = aux1->siguiente;
}
if(lista == aux1){
lista = nuevo_nodo;
}
else{
aux2->siguiente = nuevo_nodo;
}
nuevo_nodo->siguiente = aux1;
cout<<"\tElemento "<<n<<" insertado a la lista\n";
}
Y en C
#include <stdio.h>
#include <stdlib.h>
typedef struct Nodo{
int dato;
struct Nodo *siguiente;
}Nodo;
void insertarLista(Nodo *&,int);
int main(int argc, char *argv[]) {
Nodo *lista = NULL;
int dato;
printf("Digite un numero: ");
scanf("%d",&dato);
insertarLista(lista,dato);
return 0;
}
void insertarLista(Nodo *&lista,int n){
Nodo *nuevo_nodo = (Nodo*)malloc(sizeof(int));
nuevo_nodo->dato = n;
Nodo *aux1 = lista;
Nodo *aux2;
while((aux1 != NULL) && (aux1->dato <n)){
aux2 = aux1;
aux1 = aux1->siguiente;
}
if(lista == aux1){
lista = nuevo_nodo;
}
else{
aux2->siguiente = nuevo_nodo;
}
nuevo_nodo->siguiente = aux1;
printf("Elemento %d insertado a la lista\n",n);
}
La referencia para el caso funciona como una simplificacion de punteros y desreferenciaciones:
- Cambia en la definicion de la funcion para que reciba un puintero (quedaria Nodo **lista)
- En todas partes en que el codigo original de insertarLista en C++ que diga lista, en el de C pones *lista . (si llegas a omitir alguna, el programa va a fallar).
- En la invocacion de la funcion, en el main, donde dice lista, pones &lista.