Como imprimir uma lista simplesmente encadeada?

11 respostas
AbnoanMuniz

Caros GUJnaltas,

Eu tenho uma lista simplesmente encadeada, consigo acessar os valores manualmente sem problemas. Minha duvida é quando ao laço de repetição para printar toda a lista.

public class Lista {

	NoLista inicio;
	
	public Lista () {
		this.inicio = null;
		
	}
	
	public void inserirNoInicio(int valor){
		NoLista no = new NoLista(valor);
		if(this.inicio == null){
			this.inicio = no;
		}else{
			no.next = this.inicio;
			this.inicio = no;
		}
	}
	
	
	public void inserirNoFim(int valor){
		NoLista no = new NoLista(valor);
		if(this.inicio == null){
			this.inicio = no;
		}else{
			NoLista atual = this.inicio;
			while(atual.next != null){
				atual = atual.next;		
			}
			atual.next = no;
		}
	}
	
	    }
public class NoLista {


	int valor;
    NoLista next;

    public NoLista(int valor){
        this.valor = valor;
        this.next = null;
    }

}

Desde já, agradeço.

11 Respostas

rnldfll

Seria bom, pelo menos como vc criou essa lista :slight_smile:

AbnoanMuniz

Pronto, editei e coloquei o código. o/

rnldfll

Cara me desculpe mais sou novato e digo que não sei como usar listas assim, n vi isso até agora =O, voce tem skype ou msn? to querendo conversar sobre java para trocar conhecimentos

pvrsouza

Nesse caso vc irá precisar complementar e melhorar seu código para atender a sua necessidade de imprimir a lista. Pense assim, para varrer uma lista eu preciso saber o que? Vamos lá:

O tamanho da lista: A quantidade de nós.
Quem é o primeiro e o último item da lista: Primeiro e ultimo nó.

Sacou a idéia?

Com essas informações vc já terá condições de fazer um laço de repetição. O resto é tranquilo…

Espero ter ajudado…

Abs

orlandocn

eh só voce fazer um metodo parecido com esse:

public void imprimir(){
     NoLista noAtual = this.inicio;

     while(noAtual !=null){
          System.out.println(notaAtual);
          noAtual = noAtual.getNext();
     }


}
C
public void imprime() {

if (inicio != null{

NoLista temp = inicio;

while (temp != null) {

System.out.println(aux.valor);

temp= temp.next;

}

}

}
orlandocn
<blockquote><div class="quote-author">Cleber Luis:</div> public void imprime() {

if (inicio != null{

NoLista temp = inicio;

while (temp != null) {

System.out.println(aux.valor);

temp= temp.next;

}

}

}</blockquote>

if (inicio != null{ NoLista temp = inicio;

eh apenas mais código e consumo desnecessário de maquina.

repare que quando vc inicializa “temp” com “inicio” e logo abaixo testa se “temp” !=null, na prática está testando justamente se “inicio” != null;

AbnoanMuniz
orlandocn:
eh só voce fazer um metodo parecido com esse:
public void imprimir(){
     NoLista noAtual = this.inicio;

     while(noAtual !=null){
          System.out.println(notaAtual);
          noAtual = noAtual.getNext();
     }


}

Seguindo essa ideia, eu fiz o seguinte metodo :

public void imprimir(){  
	     NoLista noAtual = this.inicio;  
	     while(noAtual !=null){  
	          System.out.println(noAtual);  
	          noAtual = noAtual.next;  
	     }  

	}

Só que ele retorna o endereço na memoria e não o valor alocado em cada no, alguém saberia explicar o motivo ?

ViniGodoy
public class NoLista {
    int valor;
    NoLista next;

    public NoLista(int valor){
        this.valor = valor;
        this.next = null;
    }
    public void imprimir() { 
        System.out.println(valor);
        if (next != null) next.imprimir();
    }
}
E na classe Lista, crie o método:
public void imprimir() {
    if (inicio != null) inicio.imprimir();
}
AbnoanMuniz

No método que eu postei, apenas dando noAtual.valor, resolveu meu problema.

ViniGodoy:
public class NoLista {
    int valor;
    NoLista next;

    public NoLista(int valor){
        this.valor = valor;
        this.next = null;
    }
    public void imprimir() { 
        System.out.println(valor);
        if (next != null) next.imprimir();
    }
}
E na classe Lista, crie o método:
public void imprimir() {
    if (inicio != null) inicio.imprimir();
}

Dessa forma também imprime, valew o/

Gostaria de agradecer a todos que postaram aqui, minha duvida foi sanada. :D

WellingtonRamos

Uma outra maneira seria sobrescrever o método toString concatenando as informações que deseja imprimir numa string (usando stringBuilder) e, no método chamador (main?), fazer um System.out.println(lista);

Criado 14 de março de 2013
Ultima resposta 14 de mar. de 2013
Respostas 11
Participantes 7