Ao tentar remover um elemento da lista da nullpointException
Classe Operações da lista:
public class TListaDuplamenteEncadeada implements TLista {
private TNo<T> noInicio;
private TNo<T> noFim;
public TListaDuplamenteEncadeada() {
noInicio = null;
noFim = null;
}
@Override
public void inserirNoFinal(T valor) {
TNo<T> novoNo = new TNo(noFim, null, valor);
if (isVazia()) {
this.inserirNoInicio(valor);
} else {
noFim.setProx(novoNo);
noFim = novoNo;
}
}
@Override
public void inserirNoInicio(T valor) {
TNo<T> novoNo = new TNo(null, noInicio, valor);
if (isVazia()) {
noInicio = novoNo;
noFim = novoNo;
}
noInicio.setAnt(novoNo);
noInicio = novoNo;
}
@Override
public void inserirNumaPosicao(T valor, int posicao) throws PosicaoInvalidaException {
if (posicao < 1 || posicao > getTamanho())
throw new PosicaoInvalidaException();
if (posicao == 0)
this.inserirNoInicio(valor);
else if (posicao == this.getTamanho())
this.inserirNoFinal(valor);
else {
TNo<T> noAnterior = this.getNoPelaPosicao(posicao - 2);
TNo<T> noProximo = noAnterior.getProx();
TNo<T> novoNo = new TNo(noAnterior.getAnt(), noAnterior.getProx(), valor);
noAnterior.setProx(novoNo);
noProximo.setAnt(novoNo);
}
}
@Override
public T removerDoFinal() throws EstruturaVaziaException {
if (isVazia())
throw new EstruturaVaziaException();
TNo<T> ultimo = noFim;
if (getTamanho() == 1) {
this.removerDoInicio();
} else {
TNo<T> penultimo = ultimo.getAnt();
penultimo.setProx(null);
noFim = penultimo;
}
return ultimo.getDado();
}
@Override
public T removerDoInicio() throws EstruturaVaziaException {
if (isVazia())
throw new EstruturaVaziaException();
TNo<T> ultimo = noInicio;
noInicio = noInicio.getProx();
ultimo.setProx(null);
return ultimo.getDado();
}
@Override
public T removerDaPosicao(int posicao) throws EstruturaVaziaException, PosicaoInvalidaException {
if (posicao < 1 || posicao > getTamanho())
throw new PosicaoInvalidaException();
if (isVazia())
throw new EstruturaVaziaException();
TNo<T> noDaPosicao = this.getNoPelaPosicao(posicao - 1);
if (posicao == 1) {
this.removerDoInicio();
} else if (posicao == this.getTamanho()) {
this.removerDoFinal();
} else {
TNo<T> noProx = noDaPosicao.getProx();
TNo<T> noAnt = noDaPosicao.getAnt();
noAnt.setProx(noProx);
noProx.setAnt(noAnt);
}
return noDaPosicao.getDado();
}
@Override
public T removerElemento(T valor) throws EstruturaVaziaException, ElementoInexistenteException {
if (isVazia())
throw new EstruturaVaziaException();
TNo<T> aux = noInicio;
while(aux != null && aux.getDado() != valor){
aux = aux.getProx();
}
TNo<T> lixo = aux;
if(aux != null){
TNo ant = aux.getAnt();
TNo dep = aux.getProx();
if(ant == null){
noInicio = noInicio.getProx();
noInicio.setAnt(null);
}else{
ant.setProx(dep);
}if(dep != null){
dep.setAnt(ant);
}
}
return lixo.getDado();
}
public class TNo {
private TNo prox;
private TNo ant;
private T dado;
public TNo() {
}
public TNo(T dado) {
this.dado = dado;
}
public TNo(TNo ant, TNo prox, T dado) {
this.prox = prox;
this.ant = ant;
this.dado = dado;
}
public TNo getProx() {
return prox;
}
public void setProx(TNo prox) {
this.prox = prox;
}
public TNo getAnt() {
return ant;
}
public void setAnt(TNo ant) {
this.ant = ant;
}
public T getDado() {
return dado;
}
public void setDado(T dado) {
this.dado = dado;
}
public String toString() {
return "dado:" + dado;
}