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;
}
}
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.
Muchas gracias! ya lo logre comprender, me salvaste
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.