Você deve implementar uma lista duplamente encadeada adicionando o métodoinverte(), que inverte a ordem dos elementos da lista sem modificar o conteúdo de cada nó. O método não pode fazer alteração dovalorarmazenado nos nós, podendo alterar somente as referências aos atributospróximoeanteriordos mesmos. Ou seja, não serão aceitas soluções que façam as trocas de valores dos nós, os nós devem mudar de posição, por meio da manipulação de ponteiros.
Obs: não devem ser utilizadas estruturas de dados adicionais para a solução do problema
não consegui fazer a função inverte funcionar
meu código:
#include<iostream>
usingnamespacestd;
typedefint dado;
classnoh {
friendclasslista;
private:
dado valor;
noh* proximo;
noh* anterior;
public:
noh(dadod);
};
noh::noh(dado d) {
valor = d;
proximo =NULL;
anterior =NULL;
}
classlista {
private:
noh* primeiro;
noh* ultimo;
int tamanho;
public:
lista();
~lista();
boollistaVazia(){return primeiro ==NULL;};
voidinsere(dadovalor);
lista&operator=(constlista&L2);
voidimprime();
voidinverte();
voidimprimeReverso();
};
lista::lista() {
primeiro =NULL;
ultimo =NULL;
tamanho =0;
}
lista::~lista( ) {
noh* aux = primeiro;
noh* temp;
while (aux !=NULL) {
temp = aux;
aux =aux->proximo;
delete temp;
}
primeiro =NULL;
ultimo =NULL;
tamanho =0;
}
voidlista::insere(dadovalor) {
noh* novo =newnoh(valor);
if(listaVazia()){
primeiro = novo;
}else{
ultimo->proximo= novo;
novo->anterior= ultimo;
}
ultimo = novo;
tamanho++;
}
voidlista::inverte() {
noh* novo =newnoh(valor);
}
lista&lista::operator=(constlista&L2){
noh* aux;
if(!listaVazia()){
aux = primeiro;
noh* temp;
cout <<aux->valor<< endl;
while (aux !=NULL) {
temp = aux;
aux =aux->proximo;
delete temp;
}
primeiro =NULL;
ultimo =NULL;
}
aux =L2.primeiro;
while (aux !=NULL) {
insere(aux->valor);
aux =aux->proximo;
}
return*this;
}
/*
void lista::inverte(){
noh* aux22 = new noh;
aux22 = primeiro;
primeiro = ultimo;
ultimo = aux22;
for(int i = 0; i < tamanho; i++){
noh* ptrAux;
ptrAux = aux22->anterior;
aux22->anterior = aux22->proximo;
aux22->proximo = ptrAux;
aux22 = aux22->anterior;
}
}
*/
voidlista::imprime(){
noh* aux = primeiro;
while(aux !=NULL){
cout <<aux->valor<<" ";
aux =aux->proximo;
}
cout << endl;
}
voidlista::imprimeReverso(){
noh* aux = ultimo;
while(aux !=NULL){
cout <<aux->valor<<" ";
aux =aux->anterior;
}
cout << endl;
}
intmain() {
lista minhalista;
char opcao;
while (opcao !='Q')
{
cout <<"================= Menu ===================="<< endl;
cout << endl <<"I: Insere uma palavra na lista original"<< endl;
Pergunta
lucca.bertolucci
Você deve implementar uma lista duplamente encadeada adicionando o método inverte(), que inverte a ordem dos elementos da lista sem modificar o conteúdo de cada nó. O método não pode fazer alteração do valor armazenado nos nós, podendo alterar somente as referências aos atributos próximo e anterior dos mesmos. Ou seja, não serão aceitas soluções que façam as trocas de valores dos nós, os nós devem mudar de posição, por meio da manipulação de ponteiros.
Obs: não devem ser utilizadas estruturas de dados adicionais para a solução do problema
não consegui fazer a função inverte funcionar
meu código:
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.