/*! \param dado um elemento a ser retirado da lista \return as informações do dado retirado da lista \sa retiraDuplo(), retiraDoInicioDuplo(), eliminaDoInicioDuplo(), retiraDaPosicaoDuplo() */ T retiraEspecificoDuplo(const T& dado) { try { return retiraDaPosicaoDuplo(posicaoDuplo(dado)); } catch (std::exception& e) { throw e; } }
/* * @brief Metodo retiraEspecificoDuplo * @details Metodo para retirar um elemento especifico da Lista * @param O parametro 'dado' é o elemento especifico a ser retirado da lista * @return Retorna o dado a ser retirado */ T retiraEspecificoDuplo(const T& dado) { if (listaVazia()) { throw("Lista Vazia"); } else { return (retiraDaPosicaoDuplo(posicaoDuplo(dado))); } }
/*! * \brief Funcao retiraEspecificoDuplo * \param dado passado por referencia e um tipo generico constante * que representa o dado que deve ser retirado da lista. * \return uma chamada para a funcao retiraDaPosicao. * \sa listaVazia(), posicaoDuplo(...), retiraDaPosicaoDuplo(...) * * Se a lista nao estiver vazia, entao chama a funcao posicaoDuplo * para ter o local do dado passado como argumento e passa esse * local para a funcao retiraDaPosicaoDuplo que fara o processo * de retirada do dado. */ T retiraEspecificoDuplo(const T &dado) { if (listaVazia()) { throw "problema"; } else { return retiraDaPosicaoDuplo(posicaoDuplo(dado)); } }
/** Verifica se determinado dado existe dentro da Lista Duplamente Encadeada. * Este método recebe um dado que será analisado para verificar se este dado está dentro da Lista. * @param dado O dado que será verificado a existência dentro da lista. * @see posicaoDuplo(const T& dado) * @return um boolean que indica se o dado está presente (true) ou não (false) dentro da lista. */ virtual bool contemDuplo(const T& dado) { try { posicaoDuplo(dado); return true; } catch(std::exception& e) { return false; } }
T* ListaDupla<T>::posicaoMemDuplo(const T& dado) const { if (listaVazia()) { throw ExcecaoListaVazia(); } int posicao = posicaoDuplo(dado); ElementoDuplo<T>* atual = cabeca; for (int i = 1; i < posicao; i++) { atual = atual->getProximo(); } return atual->getInfo(); }
T retiraEspecificoDuplo(const T& dado) { //caso erro refazer este método return retiraDaPosicaoDuplo(posicaoDuplo(dado)); }
/** * @brief Retira um elemento que tenha um dado específico e retorna * seu dado * * @details Utiliza o método retiraDaPosicaoDuplo() com paramêtro o método * posicaoDuplo() */ T retiraEspecificoDuplo(const T& dado) { return retiraDaPosicaoDuplo(posicaoDuplo(dado)); }
T ListaDupla<T>::retiraEspecificoDuplo(const T& dado) { if (listaVazia()) { throw ExcecaoListaVazia(); } return this->retiraDaPosicaoDuplo(posicaoDuplo(dado) + 1); }
/** Retira um objeto específico da Lista Duplamente Encadeada. * Este método retira o primeiro objeto da Lista Duplamente Encadeada que tem o mesmo valor do dado fornecido. * @see retiraDaPosicaoDuplo(int pos) * @see posicaoDuplo(int pos) * @return o objeto do tipo T que foi retirado da Lista. */ virtual T retiraEspecificoDuplo(const T& dado) { int posicao = posicaoDuplo(dado); return retiraDaPosicaoDuplo(posicao); }