Page 286

4.6 Listas con enlace simple lista.c 1 2 3

int pertenece(TipoLista lista, int valor ) { struct Nodo * aux ;

4

for (aux =lista; aux != NULL ; aux = aux ->sig) if (aux ->info == valor ) return 1; return 0;

5 6 7 8 9

}

´ Esta ha sido f´ acil, ¿no? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . · 257 ¿Funciona correctamente pertenece cuando se suministra NULL como valor de lista, es decir, cuando se suministra una lista vac´ıa? ¿Y cuando se suministra una lista con un u ´nico elemento? .............................................................................................

4.6.10.

Borrado del primer nodo con un valor determinado

El problema que abordamos ahora es el dise˜ no de una funci´on que recibe una lista y un valor y elimina el primer nodo de la lista cuyo campo info coincide con el valor. lista.h ... extern TipoLista borra_primera_ocurrencia(TipoLista lista, int valor );

Nuestro primer problema consiste en detectar el valor en la lista. Si el valor no est´a en la lista, el problema se resuelve de forma trivial: se devuelve la lista intacta y ya est´a. E lista.c E 1 2 3

TipoLista borra_primera_ocurrencia(TipoLista lista, int valor ) { struct Nodo * aux ;

4

for (aux =lista; aux != NULL ; aux = aux ->sig) if (aux ->info == valor ) { ... } return lista;

5 6 7 8 9 10 11

}

Veamos con un ejemplo en qu´e situaci´on estamos cuando llegamos a la l´ınea marcada con puntos suspensivos. En esta lista hemos buscado el valor 8, as´ı que podemos representar la memoria as´ı: aux lista

info

sig

3

info

sig

8

info

sig

2

Nuestro objetivo ahora es, por una parte, efectuar el siguiente ((empalme)) entre nodos: aux lista

info

3

sig

info

8

sig

info

sig

2

y, por otra, eliminar el nodo apuntado por aux : 280

Introducci´ on a la Programaci´ on con C

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement