Lista Encadeada

:shock: Galera,

gostaria de saber como se faz um programa em Java utilizando uma Lista encadeada baseada no conceito de Nó com os campos: elem e prox. Criei as classes No, Lista e UsaLista, mas estou tendo alguns problemas pq não posso usar as classes já existentes do Java.

A classe lista tem as seguintes operações:

inserir elemento no inicio
inserir elemento no final
inserir elemento depois de um determinado valor
retirar elemento do início
retirar elemento do final
olhar o início
olhar o final
toString

Agradeço infinitamente por qualquer ajuda!

Dê uma olhada na java.util.LinkedList. Faz exatamente isso que vc quer :wink:

:frowning:
Agradeço a CV pela indicação.

Porém ainda permanece o atormentador erro: NullPointerException no método main. Se alguém puder me dar uma LUZ…

Agradeço desde já!

Faz tudo a mão mesmo !!!
Faz a classe nó, lista e uma classe para vc testar; se quiser te mando alguns códigos que tenho de lista em Java.

:lol: Ok, Neo!

Agradeceria muitíssimo se vc pudesse me enviar os códigos que vc tem de lista em Java. Me ajudaria muito. Preciso fazer esse programa rodar até amanhã, no final da tarde.

Se não puder colocar no fórum, segue meu e-mail: starkitty@uol.com.br

Desde já, infinitos obrigados.

:shock: Oi, CV,

Seque o código da lista encadeada…

class No{
private int elem;
private No prox;
public No(int n){
elem=n;
prox=null;
}
public No inicia(int n){
No aux = new No(n);
return aux;
}

public void insereProx(No n){
	prox=n;
	}	   	
public No passaProximo(){
	return prox;
	}
    public void inserenoProx(No n) {
       prox = n;
            }
public int mostra(){
	return elem;
        }	

   }	 	

Lista:

class Lista{
private No inicioL;
private No fimL;
public Lista(){
inicioL=new No(0);
fimL=new No(0);
}
public void inserenoInicio(No n) {
if (inicioL==null) {
inicioL=n;
fimL=inicioL;
}
else {
n.insereProx(inicioL);
inicioL=n;
}
}
public void inserenoFinal(No n) {
if (fimL==null) {
fimL=n;
inicioL=fimL;
}
else {
fimL.insereProx(n);
fimL=n;
}
}
public void insere(No n) {
if (inicioL==null) {
inicioL=fimL=n;
}
else {
if (n.mostra()<inicioL.mostra()) {
inserenoInicio(n);
}
else{
if (n.mostra()>fimL.mostra()) {
inserenoFinal(n);
}
else {
No aux = inicioL;
while (aux.mostra()<n.mostra()) {
aux=aux.passaProximo();
}
n.inserenoProx(aux.passaProximo());
aux.passaProximo();
}
}}
}
public No retiraInicio() {
No aux = inicioL;
if (inicioL != null) {
inicioL = inicioL.passaProximo();
aux.inserenoProx(null);
}
return aux;
}
public No retiraFinal() {
No aux = fimL;
if (fimL != null) {
fimL = fimL.passaProximo();
aux.inserenoProx(null);
}
return aux;
}
public int exibeInicio(){
return inicioL.mostra();
}
public int exibeFinal(){
return fimL.mostra();
}
public String toString(){
String resultado="Lista = ";
while (inicioL.mostra() <= fimL.mostra()) {
resultado=resultado+inicioL.mostra();
inicioL = inicioL.passaProximo();
}
return resultado;

}

}

UsaLista:

class UsaLista{
public static void main (String[ ] args){
Lista linha = new Lista();
int cont=1;
while (cont<=10){
No n=new No (cont);
linha.insere(n);
cont++;
}
No n=new No(0);
linha.inserenoInicio(n);
n.inicia(12);
linha.inserenoFinal(n);
n.inicia(11);
linha.insere(n);
linha.retiraInicio();
linha.retiraFinal();
System.out.println(linha.exibeInicio());
System.out.println(linha.exibeFinal());
System.out.println(linha);
}
}

Agradeço se puder ver o erro que não tô enxergando!

Taí o código:

[code]import javax.swing.*;

class Celula {
private int info;
private Celula proximo;

Celula (int novo)
{
this.info = novo;
this.proximo = null;
}

int getInfo()
{ return this.info; }
Celula getProx()
{ return this.proximo;}
void setProx(Celula c)
{ this.proximo = c;}

public static void main (String []args) {
Celula inicio = null;
Celula ultimo = null;
int a=0;
while (a!=4)
{
a=Integer.parseInt(JOptionPane.showInputDialog(null,“Digite
1-Inserir
2-Remover
3-Imprimir
4-Sair”,“Lista - Java”,0));
if (a==1)
{
int aux=Integer.parseInt(JOptionPane.showInputDialog(null,"Digite novo elemento da lista: ",“Inserção”,1));
Celula b = new Celula(aux);
if (inicio==null && ultimo==null)
{
inicio=b;
ultimo=b;
b.setProx(null);
} //fim do if
else
{
Celula temp = inicio;
Celula temp1 = inicio;
while (temp != null)
{
if (temp.getInfo() < b.getInfo() && temp.getProx()!=null)
{
temp1=temp;
temp=temp.getProx();
}
else if (temp.getInfo() < b.getInfo() && temp.getProx()== null)
{
temp.setProx(b);
b.setProx(null);
ultimo=b;
//ultimo=new Celula(aux);
temp=null;
}
else if (temp.getInfo() > b.getInfo() )
{
b.setProx(temp);
if (inicio==temp)
{
inicio=b;
//inicio=new Celula(aux);
}
if (temp1 != temp)
{
temp1.setProx(b);
temp=temp1;
temp.setProx(b);
}
temp=null;
}
else if (temp.getInfo() == b.getInfo())
{
JOptionPane.showMessageDialog(null,“Já existe este elemento na lista”,“Inserção”,1);
temp=null;
}
} //fim do while
} // fim do else
} // fim do if do Inseri
else if (a==2)
{
int aux=Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o elemento da lista que você quer excluir: ",“Remoção”,1));
Celula rem = new Celula(aux);
Celula temp=inicio;
Celula temp1=inicio;
while (temp != null)
{
if (rem.getInfo()==temp.getInfo())
{
if (temp==inicio)
{
if (inicio==ultimo)
ultimo=null;
inicio=inicio.getProx();
}
else if (temp==ultimo)
{
temp1.setProx(null);
ultimo=temp1;
}
else
{
temp1.setProx(temp.getProx());
}
temp=null;
JOptionPane.showMessageDialog(null,“Número removido com sucesso”,“Remoção”,1);
} //fim do if
else
{
temp1=temp;
temp=temp.getProx();
if (temp==null)
JOptionPane.showMessageDialog(null,“Número não encontrado na lista”,“Remoção”,1);

                      }
             }//fim do while
           } // fim do if a
           else if (a==3)
           {
                Celula temp=inicio;
                String result="";
                while (temp!=null)
                {
                result += temp.getInfo()+"

";
temp=temp.getProx();
}
JOptionPane.showMessageDialog(null,result,“Impressão”,1);
}
} //fim do while
System.exit(0);
}
} //fim da classe Celula[/code]