Ver Mensaje Individual
  #9 (permalink)  
Antiguo 27/02/2013, 13:18
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Printar lista enlazada

Ok fue culpa mia, omiti el puntero UltimNode cuando te plantee la funcion 'eliminarNode': en la condicion de eliminar nodo diferente del primero, solo debes asignar a la global UltimNode la referencia al nodo previo al que vas a borrar en el caso que vayas a borrar el ultimo elemento de la lista (esto incluye el caso de un unico elemento)

Código:
void eliminarNode(char *dominio) {
    NodeDNS *cur, *pre;
	
    cur = PrimerNode;
    pre = NULL;
	
    while(cur) {//cicle
        if(!strcmp(cur->nombre, dominio)) {//troba objectiu
            if(!pre) {//objectiu == primer node
                PrimerNode = cur->DNSseguent;
	    	}
            else {//objectiu != primer node
                pre->DNSseguent = cur->DNSseguent;
            }
            
            //node objectiu es l'ultim de la llista?
            //independentment de si es el primer o no
            if(!strcmp(cur->nombre, UltimNode->nombre)) {
		UltimNode = pre;
	    }
            
            //allibera
            free(cur);

            //surt del cicle
            break;
        }

        //iteracio
        pre = cur;
        cur = cur->DNSseguent;
	}
}
Ten en cuenta que los punteros al ultimo nodo de una lista solo son utiles cuando trabajas con listas doblemente enlazadas (dentro del struct tendrias dos punteros: uno al nodo siguiente y otro al anterior) y sirve para acelerar las busquedas; en este caso el puntero al ultimo nodo solo sirve para acelerar la adicion de un nodo al final de la lista.

Otra cosa, tienes algun error de concepto, te los comento:

La funcion de entrada a la aplicacion es de tipo entero, debes declararla como tal y retornar un valor entero (por defecto se usa 0 si todo ok, o un valor diferente de 0 como indice de error en caso que se produjera alguno)

Código:
int main() {
    ...
    return 0;
}
Lo de asignar el valor nulo a los punteros nulos, antes de comenzar a trabajar con las globales PrimerNode y UltimNode debes asignarles el valor nulo (puede darse el caso que les asigne un bloque de memoria con datos basura):

Código:
NodeDNS *PrimerNode = 0;
NodeDNS *UltimNode = 0;
Saludos
vosk