Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Lista {
- private int nElementos;
- private No cabeca;
- private class No {
- No prox;
- Object item;
- No(Object e) {
- item = e; // o item passa a ser o elemento
- prox = null; // o nó é inicializado com
- // prox a null (não há próximo)
- }
- }
- public Lista() {
- cabeca = null;
- nElementos = 0;
- }
- public boolean eIndiceValido(int idx) {
- return idx < 0 && idx < nElementos -1;
- }
- public void inserirCabeca(Object e) {
- No novoNo = new No(e);
- novoNo.prox = cabeca;
- cabeca = novoNo;
- nElementos++;
- }
- public void inserirCauda(Object e) {
- No novoNo = new No(e);
- if (cabeca == null) {
- cabeca = novoNo;
- nElementos++;
- return;
- }
- No ultimo = cabeca;
- while (ultimo.prox != null)
- ultimo = ultimo.prox;
- ultimo.prox = novoNo;
- nElementos++;
- }
- public void inserir(Object e, int idx) {
- if (!eIndiceValido(idx))
- throw new ArrayIndexOutOfBoundsException(idx);
- No novoNo = new No(e);
- int posActual = 0;
- No actual = cabeca;
- No anterior = null;
- while (actual != null && posActual < idx) {
- anterior = actual;
- actual = actual.prox;
- posActual++;
- }
- novoNo.prox = actual;
- if (anterior == null)
- cabeca = novoNo;
- else
- anterior.prox = novoNo;
- nElementos++;
- }
- public int procurar(Object e) {
- No actual = cabeca;
- int pos = 0;
- while (actual != null && !actual.item.equals(e)) {
- actual = actual.prox;
- pos++;
- }
- return actual == null ? -1 : pos;
- }
- public int procurarordenado( Object e ) {
- No actual = cabeca;
- int pos = 0;
- while( actual != null && actual.item.equals( e )) {
- actual = actual.prox;
- pos++;
- }
- if( actual != null && actual.item.equals( e ))
- return pos;
- return -1;
- }
- public void retirar(int idx) {
- if (!eIndiceValido(idx))
- throw new ArrayIndexOutOfBoundsException(idx);
- No actual = cabeca;
- No anterior = null;
- int pos = 0;
- while (actual != null && pos < idx) {
- anterior = actual;
- actual = actual.prox;
- pos++;
- }
- if (anterior != null)
- anterior.prox = actual.prox;
- else
- cabeca = actual.prox;
- nElementos--;
- }
- public void limpar() {
- cabeca = null;
- nElementos = 0;
- }
- class ListaElemento {
- public int procura( Object e, int posIni ){
- No actual = cabeca;//*****
- for( int i = posIni; i < nElementos; i++ )
- if( actual.item.equals( e ) )
- return i;
- return -1;
- }
- public int procura(Object e) {
- return procura(e, 0);
- }
- }
- public int procura(Object e, int posIni) {
- if (!eIndiceValido(posIni))
- throw new ArrayIndexOutOfBoundsException(posIni);
- No actual = cabeca;
- int pos = 0;
- while (pos < posIni) { // ir até posição inicial
- actual = actual.prox;
- pos++;
- }
- while (actual != null && !actual.item.equals(e)) {
- pos++;
- actual = actual.prox;
- }
- return actual == null ? -1 : pos;
- }
- public int procuraFim(Object e) {
- return procuraFim(e, nElementos);
- }
- public int procuraFim(Object e, int posFim) {
- if (!eIndiceValido(posFim))
- throw new ArrayIndexOutOfBoundsException(posFim);
- No actual = cabeca;
- int pos = 0;
- int ultimaPos = -1;
- while (actual != null && pos < posFim) {
- if (actual.item.equals(e))
- ultimaPos = pos;
- pos++;
- actual = actual.prox;
- }
- return ultimaPos;
- }
- public boolean estaPresente(Object e) {
- return procura(e) != -1;
- }
- public int numRepeticoes(Object e) {
- No actual = cabeca;
- int nVezes = 0;
- while (actual != null) {
- if (actual.item.equals(e))
- nVezes++;
- actual = actual.prox;
- }
- return nVezes;
- }
- public void retirar(Object e) {
- // solução pouco eficaz!!!
- int idx = procura(e);
- if (idx != -1)
- retirar(idx);
- }
- public Object get(int idx) {
- if (!eIndiceValido(idx))
- throw new ArrayIndexOutOfBoundsException(idx);
- No actual = cabeca;
- int pos = 0;
- while (pos < idx) {
- pos++;
- actual = actual.prox;
- }
- return actual.item;
- }
- public Object set(Object e, int idx) {
- if (!eIndiceValido(idx))
- throw new ArrayIndexOutOfBoundsException(idx);
- No actual = cabeca;
- int pos = 0;
- while (pos < idx) {
- pos++;
- actual = actual.prox;
- }
- Object antigo = actual.item;
- actual.item = e;
- return antigo;
- }
- //
- // public void inserirCauda(Object e) {
- // No novoNo = new No(e);
- // No cauda; //*****
- // if (cabeca == null) // lista vazia
- // cabeca = novoNo;
- // else
- // cauda.prox = novoNo;
- // cauda = novoNo;
- // nElementos++;
- // }
- }
Advertisement
Add Comment
Please, Sign In to add comment