Punteros Dobles en C

Iniciado por GonzaloRamirez, 6 Diciembre 2019, 20:43 PM

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

GonzaloRamirez

Hola, alguien me puede dar una ayuda con este código de insertar ordenado en una lista? , no logro comprender el nodo** lista, por que se pasa como doble puntero? que función cumple.


void insertar_ordenado (nodo** lista, elemento e){
    nodo* actual;
    nodo* anterior;
    nodo* nuevo = malloc(sizeof(nodo));
    nuevo->e=e;
    actual=*lista;
    anterior=NULL;
    while(actual!=NULL && actual->e.dni < e.dni){
         anterior=actual;
         actual=actual->sig;
    }
    if(anterior!=NULL){
         anterior->sig=nuevo;
         nuevo->sig=actual;
    }else{
         nuevo->sig=*lista;
         *lista=nuevo;
   }
}

ThunderCls

En este caso la funcion "insertar_ordenado" intentara modificar la cabeza de lista y por consiguiente dicho puntero necesita ser pasado como referencia (doble puntero), de lo contrario el puntero o nodo principal de la lista seria pasado como copia y solo se modificaria el orden de la copia de la lista dentro de dicha funcion y no la original. Una variante seria la de pasar lista como puntero simple pero retornar el nodo principal en lugar de usar void.
-[ "...I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/

GonzaloRamirez

Muchas gracias! ya lo logre comprender, me salvaste

AlbertoBSD

Cuando pegues codigos deberías de colocar la funte de tu codigo, ya que se nota que lo copiaste de algun lugar... , asi mismo utilizar la etiqueta de código adecuada para que salga bien indentado.

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW