NullPointException ao remover elemento estrutura de dados

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;
}

Post a stack completa do erro.