Lista Encadeada Com Genéricos

1 resposta
T

Olá a todos peço dicas de como implementar uma lista encadeada em java usando genéricos. Minha principal dificuldade está em usar os genéricos neste problema, por isto peço uma dica principalmente nesta parte.

Obrigados a todos.

1 Resposta

InSeOfKn
Adaptando o exemplo que achei na Wikipédia para usar genericos ficou assim:
class No <T>{
	Object elemento;
	No<T> prox;

	No(T elem) {
		elemento = elem;
		prox = null;
	}
}

public class ListaLigada <T> {
	private No<T> primeiro, ultimo;
	private int nroNos;

	ListaLigada() {
		primeiro = null;
		ultimo = null;
		nroNos = 0;
	}

	public boolean isVazia() {
		return (primeiro == null && ultimo == null);
	}

	public void addInicio(T o) {
		nroNos++;
		No<T> novoNo = new No<T>(o);
		if (isVazia())
			ultimo = novoNo;
		else
			novoNo.prox = primeiro;
		primeiro = novoNo;
	}

	public void addFinal(T o) {
		nroNos++;
		No<T> novoNo = new No<T>(o);
		if (isVazia())
			primeiro = novoNo;
		else
			ultimo.prox = novoNo;
		ultimo = novoNo;
	}

	public int getNroNos() {
		return nroNos;
	}

	/*
	 * @param posicao posição contada a partir do zero como primeiro elemento
	 */
	public void addMeio(T o, int posicao) {
		nroNos++;
		No<T> novoNo = new No<T>(o);
		if (posicao <= 1) {
			addInicio(o);
			return;
		}
		if (posicao > nroNos) { // Outra abordagem seria lançar exceção para
								// posição inválida (>nroNos+1)
			addFinal(o);
			return;
		}
		No<T> noTemp = primeiro.prox;
		posicao--;
		for (int posAux = 1; posAux < posicao; posAux++)
			noTemp = noTemp.prox;
		novoNo.prox = noTemp.prox;
		noTemp.prox = novoNo;
	}

	public void Remover(T elemento) {
		No<T> noTemp = primeiro;
		No<T> noAnt = null;

		if (primeiro.elemento.equals(elemento)) {
			primeiro = primeiro.prox;
			nroNos--;
		} else {
			while (noTemp != null && !noTemp.elemento.equals(elemento)) {
				noAnt = noTemp;
				noTemp = noTemp.prox;
			}
			if (noTemp != null) {
				noAnt.prox = noTemp.prox;
				nroNos--;
			}
			if (noTemp == ultimo) {
				ultimo = noAnt;
			}
		}
	}

	public Object BuscarElemento(T elemento) {
		int i = 1;
		No<T> noTemp = primeiro;

		while (noTemp != null) {
			if (noTemp.elemento.equals(elemento)) {
				return noTemp;
			}
			i = i + 1;
			noTemp = noTemp.prox;
		}
		return null;
	}
}

Obs: não sei se funciona não fiz testes só copiei e adicionei os genéricos

Até!

Criado 10 de maio de 2011
Ultima resposta 10 de mai. de 2011
Respostas 1
Participantes 2