sábado, 19 de enero de 2008

Extrae Por Valor de Una Lista Simplemente Enlazada en lenguaje C

Desarrolle la función "extraeValor" iterativa a la que pasándole la dirección de un puntero al inicio de una lista enlazada y un entero, extraiga el primer elemento de la lista con ese valor. La función devuelve 1 si se ha realizado la extracción y 0 en caso contrario. Para eliminar un nodo de memoria dinámica emplee la función free.

int extraeValor (PNodoLista *p, int v){
PNodoLista nuevo=*p;
//no hay lista devolvemos 0
if(nuevo == NULL) return 0;
//miramos si el valor que buscamos es el primer nodo de la lista
if (nuevo->dato == v){
//si lo encontramos lo eliminamos y devolvemos 1
*p=nuevo->sig;
free(nuevo);
return 1;
}
else {
//sino vamos buscando por la lista
while (nuevo->sig !=NULL){
PNodoLista aux=nuevo->sig;
//hasta que encontremos el valor a borrar y devolvemos 1
if(aux->dato==v){
nuevo->sig=aux->sig;
free(aux);
return 1;
}
nuevo=aux;
}
//en caso de que no este el valor devolvemos cero
return 0;
}
}