Saludos.
Tengo la siguiente duda:
Tengo el siguiente codigo fuente de una lista circular:
#include <stdio.h>
#include <stdlib.h>
typedef struct listacompleta {
int dato;
struct listacompleta *next;
}lista;
void add_nod(lista **nodoe, int dato){
lista *nuevo,*aux;
nuevo = (lista *) malloc (sizeof(lista));
nuevo->dato = dato;
aux = *nodoe;
if(*nodoe == NULL ){
nuevo->next = nuevo;
*nodoe = nuevo;
} else{
/* *nodoe = *nodoe->next; */
nuevo->next = aux->next;
aux->next = nuevo;
}
}
int main(){
lista *nodoe;
nodoe = NULL;
add_nod(&nodoe,8);
add_nod(&nodoe,2);
add_nod(&nodoe,3);
add_nod(&nodoe,5);
system("pause");
return 0;
}
El caso es que dentro de add_nod la linea que esta comentada no me compila, pero me gustaría avanzar en uno el elemento nodoe para agregar elementos a partir del ultimo insertado en la lista circular, como puedo hacer eso y por que me da error al compilar, me he mirado el error y creo que es porque es un puntero de puntero, pero no se como solucionarlo.
Un saludo y gracias a todos.
Tienes que usar paréntesis!!!
#include <stdio.h>
#include <stdlib.h>
typedef struct listacompleta {
int dato;
struct listacompleta *next;
}lista;
void add_nod(lista **nodoe, int dato){
lista *nuevo,*aux;
nuevo = (lista *) malloc (sizeof(lista));
nuevo->dato = dato;
aux = *nodoe;
if(*nodoe == NULL ){
nuevo->next = nuevo;
*nodoe = nuevo;
} else{
*nodoe = (*nodoe)->next;
nuevo->next = aux->next;
aux->next = nuevo;
}
}
int main(){
lista *nodoe;
nodoe = NULL;
add_nod(&nodoe,8);
add_nod(&nodoe,2);
add_nod(&nodoe,3);
add_nod(&nodoe,5);
system("pause");
return 0;
}
Muchas gracias :)
Discúlpame ¿Podrías decirme o explicarme por que uso el paréntesis? es que no conocía esa nomenclatura al usar punteros.
Un saludo y Feliz Año Nuevo. :)
Bueno, es que al desreferenciar dicha variable sin paréntesis estás desreferenciando nodoe->next, y lo que tu quieres desreferenciar es solo nodoe, el cual es un puntero a puntero de struct. Tu quieres hacer: (**nodoe).next == (*nodoe)->next.
Si le quitas los paréntesis, es como hacer *(nodoe->next) lo cual es un error porque no existe ningún campo en la variable (*nodoe) ya que es sólo un puntero a struct (debes desreferenciar solamente nodoe nuevamente para acceder a la struct correspondiente y al campo next en ella).
Espero que se haya entendido!
Salú!
Muchas gracias por contestar, y disculpa la tardanza estos día con las fiestas en la familia no he podido conectarme mucho, con desreferenciar quieres decir quitar el puntero a puntero, para acceder a el, no?
Si es así creo que lo he entendido todo, lo que no entiendo muy bien es el concepto de desreferenciar.
Un saludo y gracias de nuevo :)
Cuando desreferencias (aplicando * antes de la variable) accedes a la direccion de memoria de dicha variable, al hacer (*nodoe)->next, accedes a la direccion de memoria de nodoe, si no utilizas parentesis accedecias a la direccion de memoria de nodoe->next
Creo que no me he equivocado :laugh: , espero que te sirva la explicacion
Saludos!
Muchísimas gracias creo que ya entendí todo : )