Duvida com lista simples

eu preciso criar um programa para cadastrar o rg de um numero indeterminado de pessoas e no final
realizar um sorteio e imprimir o rg sorteado, mas na hora de imprimir eu não estou conseguindo, só sai o endereço da memória

[code]public class ListaSimples {
public Nodo prim;

public ListaSimples() {
	this.prim = null;
}

public void mostraLista(){
	Nodo nodoaux = prim;
	while(nodoaux!=null){
		nodoaux.mostraNodo();
		nodoaux = nodoaux.next;
	}
}

public void insereInicio(int elemento){
	Nodo novoNodo = new Nodo(elemento);
	novoNodo.next = prim;
	prim = novoNodo;
}

public boolean isEmpty(){
	if(prim==null)
		return true;
	else
		return false;
}

public Nodo removeInicio(){
	Nodo nodoaux = prim;
	prim = prim.next;
	return nodoaux;
}

public void insereFim(int elemento){
	if(!isEmpty()){
		Nodo nodoaux = prim;
		while(nodoaux.next!=null){
			nodoaux = nodoaux.next;
		}
		Nodo novoNodo = new Nodo(elemento);
		nodoaux.next = novoNodo;
	}
	else
		insereInicio(elemento);
}

public Nodo removeFim(){
	Nodo nodoUltimo = prim;
	Nodo nodoAnterior = prim;
	while(nodoUltimo.next != null){
		nodoAnterior = nodoUltimo;
		nodoUltimo = nodoUltimo.next;
	}
	if(nodoAnterior != nodoUltimo)
		nodoAnterior.next = null;
	else
		prim = null;
	return nodoUltimo;
}

public void insere(int elemento, int posicao){
	if((posicao == 1)||(prim == null))
		insereInicio (elemento);
	else{
		int contaNodos = 1;
		Nodo nodoaux = prim;
		while(nodoaux.next != null){
			nodoaux = nodoaux.next;
			contaNodos++;
		}
		if(posicao>contaNodos)
			insereFim(elemento);
		else{
			contaNodos = 1;
			nodoaux = prim;
			while(contaNodos < posicao){
				nodoaux = nodoaux.next;
				contaNodos++;
			}
			
			Nodo novoNodo = new Nodo(elemento);
			novoNodo.next = nodoaux.next;
			nodoaux.next = novoNodo;
		}
	}
}

}[/code]

[code]import javax.swing.*;
public class TerceiroT1 {
public static void main(String[] args) {
int cont=0, id=0, i=0, j;
int a[]=new int[999999];

    ListaSimples l = new ListaSimples();
    
    while(id != 9999){
    	cont++;
    	id=Integer.parseInt(JOptionPane.showInputDialog("informe o numero da identidade: "));
    	l.insereInicio(id);
    	i++;
    	a[i]=id;
	}
    j=(int)(Math.random()*cont+1);
    for(i=1; i<cont; i++){
    	System.out.println(l.removeInicio());
    }
    
}

}[/code]

A sua classe Nodo deve definir um método “public String toString()”

essa

[code]public class Nodo {

public int dado;
public Nodo next;

public Nodo(int elemento){
	this.dado = elemento;
	this.next = null;
}

public void mostraNodo(){
	System.out.print("\n Dado: "+this.dado + "endereco: " +this.next );
}

}[/code]

como assim

System.out.println(l.removeInicio()); 

É a mesma coisa que:

Nodo n = l.removeInicio();
System.out.println (n.toString());

Então você tem de implementar o toString. Não?

deixa eu tentar fazer uma coisa

[code]import javax.swing.*;
public class TerceiroT1 {
public static void main(String[] args) {
int cont=0, id=0, i=0, j;

    ListaSimples l = new ListaSimples();
    
    while(id != 9999){
    	cont++;
    	id=Integer.parseInt(JOptionPane.showInputDialog("informe o numero da identidade: "));
    	l.insereInicio(id);
    	i++;
    	a[i]=id;
	}
	
    j=(int)(Math.random()*cont+1);
    System.out.println(j);
    
    for(i=1; i<j; i++){
    	l.removeFim();
    }
    Nodo aux = l.removeFim();
	aux.mostraNodo();
		
    System.out.println("\n");
}

}[/code]

minha lista simples ficou assim agora
mas como eu faço para não poder repetir o rg ?

Você pode criar um método “insere” que seja semelhante a “insereFim”, mas só faz isso se, olhando a lista inteira, não achar alguém com o mesmo RG.

na minha lista tem um insere na linha 62.
é isto que voce esta falando

É isso mesmo. Se você não quer que se repitam, evite que se repitam já na inserção, logo de cara.

como assim eu não entendi ?
desculpa minha burrice mas eu estou aprendendo ainda.

É assim. Você tem uma lista de Nodos.
Um campo desse nodo deve ter o RG (sinto muito, mas não li seu programa inteiro).
Usando uma lógica parecida com aquele método que imprime a lista de nodos, faça um método que acha um nodo com um determinado RG.
Se você achar esse tal nodo, então você NÃO INSERE o nodo, já que você vai acabar tendo um RG repetido se você conseguir inserir.
Senão, você insere.

Fiz correndo e ainda nao testei.

De uma olhada e melhore.
Existe comparações que nao precisam ser feitas ei fiz a mais

public void insereInicio(int elemento) {

		Nodo novoNodo = new Nodo(elemento);
		Nodo inicial = prim;
		while (inicial != null && inicial != novoNodo && inicial.next != null)
			inicial = inicial.next;

		if (inicial != novoNodo || inicial.next != novoNodo) {
			novoNodo.next = prim;
			prim = novoNodo;
		}
	}