Impressão de uma Lista Duplamente "Encadeada/Ligada"

2 respostas
alexandre_rodrigues1

Ola pessoal…

Eu gostaria de uma ajuda no metodo de impressão que criei para uma lista duplamente encadeada. Segue o código do método que esta na classe ListaLigada:

public String imprimeLista()
      {	
         String print = "Lista Ligada\n\n";
          	
         No i = primeiro;
      	
         while(i != ultimo);
         {
            print +=""+ i.getValor() + "\n";	
         	
            if (i.getProximo() != null)
            {
               i = i.getProximo();
            }
         }
      
         return print;
      }

Não esta funcionando!

Ja testei todos os métodos get’s e set’s dentro deste método. :shock:

Segue a minhas classes.

public class No
   {
   
      private int valor;
      private No anterior, proximo;
   
       public No(int vlr, No ant, No prox)
      {
         setValor(vlr);
         setAnterior(ant);
         setProximo(prox);	
      }
   
       public No(int vlr)
      {
         valor = vlr;
      }
   
   	/* METODOS DE ACESSO AOS ATRIBUTOS */
   	
   	/* METODOS MODIFICADORES */
   
       public void setValor(int vlr)
      {
         valor = vlr;
      }
   
       public void setAnterior(No ant)
      {
         anterior = ant;
      }
   
       public void setAnteriorNull()
      {
         anterior = null;
      }
   
       public void setProximoNull()
      {
         proximo = null;
      }
   
       public void setProximo(No prox)
      {
         proximo = prox;
      }
   
   	/* METODOS DE RETORNO */
   
       public int getValor()
      {
         return valor;
      }
   
       public No getAnterior()
      {
         return anterior;
      }
   
       public No getProximo()
      {
         return proximo;
      }
   }

Lista Ligada

public class ListaLigada
   {
      private No primeiro;
      private No ultimo;
   
       public ListaLigada(int p, int u)
      {
         primeiro	=	new No( p );
      	
         primeiro.setProximo( ultimo );
      	
         ultimo	=	new No( u );
         
         ultimo.setAnterior( primeiro );
      }
      
   
       
   	/* METODOS DE INSERÇÃO */
   		
       public void inserirApos(No anterior, No novo)
      {
      	
         if	(anterior == ultimo)
         {
            novo.setAnterior( anterior );
         	
            anterior.setProximo( novo );
         	
            setUltimo( novo );
         }
         
         else
         {
            novo.setAnterior( anterior );
         
            novo.setProximo( anterior.getProximo() );
         	
            (	anterior.getProximo()	).setAnterior( novo );
         	
            anterior.setProximo( novo );	
         }			
      }
      
       public void inserirAntes(No proximo, No novo)
      {
         if(proximo == primeiro)
         {
            novo.setProximo( proximo );
         	
            proximo.setAnterior( novo );
         	
            setPrimeiro( novo );	
         }
         else
         {
            novo.setProximo( proximo );
         	
            novo.setAnterior( proximo.getAnterior() );
         	
            (	proximo.getAnterior()	).setProximo( novo );
         	
            proximo.setAnterior( novo );
         			
         }
      }
    
    	/* METODO DE REMOÇÃO*/  
   	
       public void removerNo(No removido)
      {
      
         if( removido == primeiro )
         {
            setPrimeiro(	removido.getProximo()	);
         	
            removido.setProximoNull();
         	
         }
      	
         if( removido == ultimo )
         {
            setUltimo( removido.getAnterior() );
         	
            removido.setAnteriorNull();
         	
         }
         
         else
         {
            (	removido.getProximo()	).setAnterior(	removido.getAnterior()	);
         
            (	removido.getAnterior()	).setProximo( 	removido.getProximo()	);
         
            removido.setAnteriorNull();
         
            removido.setProximoNull();
         }
      }
     
      /* METODOS MODIFICADORES DOS ATRIBUTOS */
       public void setPrimeiro(No p)
      {
         p.setAnteriorNull();
         
         primeiro = p;
      }
      
       public void setUltimo(No u)
      {
         u.setProximoNull();
         
         ultimo = u;
      }
   
      
   
   	/* METODOS DE RETORNO DOS ATRIBUTOS */
   	    
       public No getPrimeiro()
      {
         return primeiro;
      }
   
       public No getUltimo()
      {
         return ultimo;
      }	
    
    	/* OUTROS METODOS */  
   		
       public String imprimeLista()
      {	
         String print = "Lista Ligada\n\n";
          	
         No i = primeiro;
      	
         while(i != ultimo);
         {
            print +=""+ i.getValor() + "\n";	
         	
            if (i.getProximo() != null)
            {
               i = i.getProximo();
            }
         }
      
         return print;
      }
      
   	
   
   }

2 Respostas

renamed

Tenta desenhar o que você tá fazendo… fica mais claro!

WendersonLP

Você não preceisa colocar um teste dentro do loop(while) verificando se o próximo node é ou não nulo, o próprio while, de acordo com a sua condição, já faz isso. Utilize a classe StringBuilder é mais prática para concatenar dados.

No run = primeiro;
StringBuilder print = new StringBuilder("Lista Ligada\n\n");

while (run != null) {
         print.append(run.getValor() + "\n");

         run = run.getProximo();
}

return String.format("%s", print);
Criado 7 de novembro de 2009
Ultima resposta 7 de nov. de 2009
Respostas 2
Participantes 3