Você está na página 1de 4

Nome: Vagner Flávio Fafetine Nhachungue

Turma: I33

Tema: Listas duplamente ligadas

public void adicionaInicio(Object elemento) {


if(elemento == null){
throw new IllegalArgumentException("Elemento nulo");
}
No novo = new No(elemento, primeiro);
if(estaVazio()){
ultimo = novo;
}else{
primeiro.setAnterior(novo);
}
primeiro = novo;
totalElem++;
}

public void adicionaPosicao(int posicao, Object elemento) {


if(elemento == null){
throw new IllegalArgumentException("Elemento nulo");
}
if(!posicaoValida(posicao)){
throw new IndexOutOfBoundsException("Posicao invalida");
}
if(estaVazio()){
adicionaInicio(elemento);
}
if(posicao == totalElem-1){
adicionaFim(elemento);
}
No anterior = pegaNo(posicao-1);
No proximo = anterior.getProximo();
No novo = new No(elemento,proximo);
novo.setAnterior(anterior);
anterior.setProximo(novo);
proximo.setAnterior(novo);
totalElem++;
}

public void adicionaFim(Object elemento) {


if(elemento == null){
throw new IllegalArgumentException("Elemento nulo");
}
No novo = new No(elemento);
if(estaVazio()){
this.primeiro = novo;
}else{
this.ultimo.setProximo(novo);
novo.setAnterior(ultimo);
}
this.ultimo = novo;
this.totalElem++;

public Object pega(int posicao) {


return pegaNo(posicao).getElemento();
}

public void removeInicio() {


if(estaVazio()){
throw new RuntimeException("Lista vazia");
}
if(totalElem == 1){
primeiro = null;
ultimo = null;
}else{
No segundo = primeiro.getProximo();
segundo.setAnterior(null);
primeiro = segundo;
}
totalElem--;

public void removePosicao(int posicao) {


if(!posicaoValida(posicao)){
throw new IndexOutOfBoundsException("Posicao invalida");
}
if(posicao == 0){
removeInicio();
}
if(posicao == totalElem-1){
removeFim();
}else{
No actual = pegaNo(posicao);
No anterior = actual.getAnterior();
No proximo = actual.getProximo();
proximo.setAnterior(anterior);
anterior.setProximo(proximo);
totalElem--;
}

public void removeFim() {


if(estaVazio()){
throw new RuntimeException("Lista vazia");
}
if(totalElem == 1){
primeiro = null;
ultimo = null;
}else{
No penultimo = ultimo.getAnterior();
penultimo.setProximo(null);
ultimo = penultimo;
}
totalElem--;
}

public boolean contem(Object elemento) {


No actual = primeiro;
while(actual != null){
if(actual.getElemento() == elemento){
return true;
}
actual = actual.getProximo();
}
return false;

public int tamanho() {


return totalElem;
}
private boolean posicaoOcupada(int posicao) {
return posicao > 0 && posicao <= totalElem;
}

private boolean posicaoValida(int posicao) {


return posicao >=0 && posicao < totalElem;
}

private No pegaNo(int posicao) {


if(!posicaoValida(posicao)){
throw new IndexOutOfBoundsException("Posicao invalida");
}
No actual;
if(totalElem/2 < posicao){
actual = primeiro;
for(int i = 0; i < posicao; i++){
actual = actual.getProximo();
}
}else{
actual = ultimo;
for(int i = totalElem-1; i > posicao; i--){
actual = actual.getAnterior();
}
}
return actual;
}
private boolean estaVazio(){
return this.totalElem == 0;
}

Você também pode gostar