ola tudo bem Friends, gostaria de entender mais este medodo algumas linhas.
package br.com.caelum.ed.listasligadas;
public class ListaLigada {
....................................................
// metodo remove do fim
public void removeDoFim() {
// verifica se a ultima posicao existe
if (!this.posicaoOcupada(totalDeElementos - 1)) {
throw new IllegalArgumentException("Posicao nao existe");
}
// se a lista estiver com apenas um elemento e a mesma coisa que remover
// do começo
if (totalDeElementos == 1) {
this.removeDoComeco();// se o total de elementos for igual a 1 ira
// remover do começo
} else {
Celula penultima = this.ultima.getAnterior();
penultima.setProxima(null);
this.ultima = penultima;
totalDeElementos--;
}
}
if (!this.posicaoOcupada(totalDeElementos - 1)) nao entendi o total de elementos -1
else {
Celula penultima = this.ultima.getAnterior();
penultima.setProxima(null);
this.ultima = penultima;
totalDeElementos--;// aqui significa que esta fazendo a remoçao certo ? nao entendi estes metodos do else
public class Celula {
.....................
//para as celulas saber qual e sua anterior
public Celula getAnterior(){
return anterior;
}
public void setAnterior(Celula anterior){
this.anterior = anterior;
}
mesma classe estou com esse metodo remove agora que vai remover do meio gostaria que alguem me explicasse a parte do ultimo else vou colocar o metodo inteiro, nao sei se posso aproveitar o mesmo topico pois o metodo e do mesmo exercicio alguem por gentileza pode me explicar.
// metodo remove
public void remove(int posicao) {
if (!posicaoOcupada(posicao)) {// verifica se a posicao esta ocupada ou
// nao, se a posicao nao estiver ocupada
// lanca uma execao, e significa que
// esta fazia para remover
throw new IllegalArgumentException(" Posicao nao existe ");
}
if (posicao == 0) {// remove do comeco
this.removeDoComeco();
} else if (posicao == this.totalDeElementos - 1) {// o total deelementos
// que tenho menos 1
// ele remove do fim
this.removeDoFim();// remove do fim
} else {
Celula anterior = this.pegaCelula(posicao - 1);
Celula atual = anterior.getProxima();
Celula proxima = atual.getProxima();
anterior.setProxima(proxima);
proxima.setAnterior(anterior);
totalDeElementos--;
}
}
essa e a parte que gostaria de uma explicação
else {
Celula anterior = this.pegaCelula(posicao - 1);
Celula atual = anterior.getProxima();
Celula proxima = atual.getProxima();
anterior.setProxima(proxima);
proxima.setAnterior(anterior);
totalDeElementos--;
}
Bom, o correto seria abrir outro tópico, pois o mesmo se refere à dúvida e não à classe… Afinal, uma classe pode ter mais de 5 mil linhas e, várias dúvidas diferentes.
Bom, explicando o else (considere o número da linha que aparece ali):
Eu me recordo de ter visto lista encadeada em C (ANSI) e o professor teimava em fazer desenhos para exemplificar… Resultado? Final em estruturas de dados…
Bom, quando você possui esta estrtutura, lista ligada, ao retirar um elemento, é preciso reordenar de forma que não haja perda na ligação dos nós (ou células, como no exemplo).
Desta forma, você precisa de um nó auxiliar (classe Celula, objeto anterior) que irá determinar qual será o ponto definido como último.
A partir desta definição, é possível determinar qual o anterior (o nó/célula que era o antepenúltimo) e qual o próximo (como foi removido o último, logo, continua sendo o primeiro).
Entendeu?
ok obrigado e valeu pela dica de abrir outro topico, obrigadao mesmo drsmachado bom no caso eu entendi sim, esses exercicios e da apostila caelum, valeu abraço.