diff --git a/libs/lista.c b/libs/lista.c index 3e0700c69600307c57ff3681697c89ac692908c5..9178c23940ea2789675097c236e1df9d00c7c532 100644 --- a/libs/lista.c +++ b/libs/lista.c @@ -147,6 +147,7 @@ bool removeNo(struct Lista *l, struct No *rNo, bool destroi(void *)) { for (No n = primeiroNoLista(l); getSucessorNo(n); n = getSucessorNo(n)) { if (getSucessorNo(n) == rNo) { setSucessorNo(n, getSucessorNo(rNo)); + setAntecessorNo(getSucessorNo(rNo), n); if (destroi != NULL) { r = destroi(getConteudo(rNo)); } @@ -157,3 +158,12 @@ bool removeNo(struct Lista *l, struct No *rNo, bool destroi(void *)) { } return false; } + +No pertenceLista(void *conteudo, Lista l) { + for(No n = primeiroNoLista(l); n; n = getSucessorNo(n)) { + if(conteudo == getConteudo(n)) { + return n; + } + } + return NULL; +} diff --git a/libs/lista.h b/libs/lista.h index 33eb81465ea3d46e242c1e18a4354a2c741c629d..58eedbed3ab0d64c65ccde81b731fd50bf6d365c 100644 --- a/libs/lista.h +++ b/libs/lista.h @@ -62,4 +62,9 @@ bool destroiLista(Lista l, bool destroi(void *)); // false, se rNo não for um No de l bool removeNoLista(struct Lista *l, struct No *rNo, bool destroi(void *)); + +//------------------------------------------------------------------------------ +// retorna o nó que contém *conteudo se está na lista l, +// NULL caso contrário +No pertenceLista(void *conteudo, Lista l); #endif