Lista dupla encadeada(socorro urgente)

0 respostas
edmilsonalves

Ola pessoal sou iniciante em java, gostaria de uma ajuda com meu codi por favor, bom eu criei uma lista dupla encadeada e gostaria de imprimilar do jeito a seguir.

preciso entregar esse trabalho semana que vem, ta tudo certo menos a parte de imprimir. socorro por favor alguem me ajude.

eu que:

tipo eu digito 1,2,3,4
ele imprime assim:

Anterior: Null
Valor: 1
Prox: 2
Anterior: 1
Valor: 2
Prox: 3
Anterior: 2
Valor: 3
Prox: 4
Anterior: 3
Valor: 4
Prox: Null

eu queria que imprimisse assim:

N - 1 - 2 - 3
1 - 2 - 3 - 4
2 - 3 - 4 - N

os Nós separadamente entendeu:

1ºNó 2ºNó 3ºNó 4ºNó

N - 1 - 2 - 3
1 - 2 - 3 - 4
2 - 3 - 4 - N

eu tentei usasr visitor mais não sei criar uma Interface pra ela ficou mais ou mesmo assim

package ListaDupla;     
  
/**  
 * @version 1.0, 25.08.2011  
 */  
public interface Visitor {   
  
    public void visit(No no);   
}
public void visitForward(Visitor visitor) {   
        for (No aux = inicio; aux != null; aux = aux.getProximo() ) {   
            visitor.visit(aux);   
        }   
    }   
       
    public void listarForward() {   
        visitForward(new Visitor() {   
            @Override  
            public void visit(No no) {   
                No anterior = no.getAnterior();   
                if (anterior != null) {   
                    System.out.print(" - " + anterior.getValor());   
                } else {   
                    System.out.print("N");   
                }   
            }   
        });   
           
        //TODO o mesmo para o nó e o nó.getProximo   
    }

mais não consegui fazer funcionar desse jeito, alguem poderia me ajudar com esse visitor, ou alguem tem alguma forma diferente pra imprimir do jeito citado acima:

Segue as classes da minha lista dupla

class Nó

package ListaDupla;


public class No {
   int Valor;
   private No proximo;
   private No anterior;
   private int posicao;
   
   public No(){
      this.proximo=null;
      this.anterior=null;
   }
   
   public No(int num){
      this.Valor =  num;
      this.proximo = null;
      this.anterior = null;
   }

   public int getValor(){
      return Valor;
   }
   public void setValor(int Valor){
      this.Valor = Valor;
   }
   public No getProximo(){
      return proximo;
   }
   public void setProximo(No proximo){
      this.proximo = proximo;
   }
   public No getAnterior(){
      return anterior;
   }
   public void setAnterior(No anterior){
      this.anterior = anterior;
   }
   public int getEndereco() {
      return System.identityHashCode(this);
   }
   public void setPosicao(int posicao) {
      this.posicao = posicao;
   }
   public int getPosicao() {
      return posicao;
   }
}

class ListaDupla

package ListaDupla;

public class ListaDupla {
   
   private No inicio;
   private No fim ;
   private int ContNo = 0;
   int tam;
   public ListaDupla(){
      tam = 0;
      inicio = null;
      fim = null;
   }
   private No primeiro = null;
   
   public void setPrimeiro(No primeiro) {
      this.primeiro = primeiro;
   }
   //Retorna o primeiro nó da lista.
   public No getPrimeiro() {
      return primeiro;
   }
   public boolean InicioVazio(){
      return (tam == 0);
   }
   public boolean FimVazio(){
      return (fim==null);
   }
   public int ContNo(){
      return this.ContNo;
   }
   
   public void addInicio (int num) {
      No NovoNo = new No(num);
      if(InicioVazio()){
         inicio = fim = NovoNo;
         fim = inicio;
         NovoNo.setAnterior(null);
      }
      else {
         fim.setAnterior(NovoNo);
         NovoNo.setProximo(inicio);
         inicio = NovoNo;
         }
      tam++;
         
   }
   
   public void addFim(int num){
      No NovoNo = new No(num);
      if(FimVazio())
      inicio=fim=NovoNo;
      else
      {
      fim.setProximo(NovoNo);
      NovoNo.setAnterior(fim);
      fim = NovoNo;
      }
      tam++;
  }
   public void listar() {
      No aux = inicio;
      while(aux!=null){
         if(aux.getAnterior()!=null){
            System.out.print("Anterior: "+aux.getAnterior().getValor()+"\n");
         }
         else{
            System.out.print("Anterior: Null "+"\n");
         }
         System.out.print("Valor: "+aux.getValor()+"\n");
         if(aux.getProximo()!=null){
            System.out.print("Prox:  "+aux.getProximo().getValor()+"\n");
         }
         else{
            System.out.print("Prox: Null");
         }
         aux = aux.getProximo();
      }
      System.out.print("\n");
      }
}
class TesteListaDupla
package ListaDupla;   
import javax.swing.JOptionPane;   
  
public class TesteListaDupla {   
  
   public static void main(String[] args) {   
  
      ListaDupla ls = new ListaDupla();   
  
      Integer num = lerInteiro();   
  
         while(num!=null){   
            ls.addFim(num);   
            num=lerInteiro();   
         }   
         ls.listar();   
   }   
      
      
   private static Integer lerInteiro() {   
  
      Integer result = null;   
      String valor = null;   
      boolean continuar = false;   
         
      do {   
         try {   
            valor = JOptionPane.showInputDialog("Informe um valor: ");   
            if (valor != null) {   
               result = Integer.parseInt(valor);   
            }   
            continuar = false;   
         } catch (Exception e) {   
            JOptionPane.showMessageDialog(null, "O valor " + valor   
                  + " não é válido");   
            continuar = true;   
         }   
      } while (continuar==true);   
  
      return result;   
   }   
      
}
Criado 26 de agosto de 2011
Respostas 0
Participantes 1