Newsgroup: it.comp.java
Titolo: Problema con lista concatenata

Salve a tutti,
ho un problema con una lista semplicemente concatenata.
Devo fare questo esercizio:
"Scrivere un metodo statico in Java, che data in input una lista ordinata
semplicemente concatenata con chiavi ripetute, restituisca la lista delle
chiavi col massimo numero di occorrenze."
Esempio:
Lista di input: < 1 1 2 3 4 4 5 6 7 7 >
La lista di output sarà quella formata da i numeri con occorrenza maggiore,
in questo caso: < 1 4 7 > che hanno occorrenza 2.
Tutto bene, ho relizzato il codice, ma ho un problema, non riesco a scorrere
la lista fino alla fine, quindi non considero l'ultimo elemento della lista
stessa.
Questo è il codice che ho realizzato:
class esercizio1
{
 public static void main(String[] args)
 {
  lista lista1= new lista();
  int comodo=0;
  for (int i=0; i<10; i++)
    {
   comodo+=(int)(Math.random()*2);
   lista1.insertTail(comodo);
  }
                System.out.println(lista1);
  System.out.println(listaConOccorrenze(lista1));
 }
// NB: il metodo getNext() della classe nodo restituisce il nodo successivo,
il metodo insertTail() della classe lista inserisce in coda l'elemento
specificato come parametro.
 public static lista listaConOccorrenze(lista l1)
 {
  lista l2=new lista();  //creo la nuova lista che restituirò alla fine
  nodo aux=l1.head;    //dichiaro e setto il nodo aux come testa della lista
di input
  nodo temp=null;     //dichiaro e setto il nodo temp a null
  int cont=1;            //conterrà il numero di occorrenze delle
informazioni ripetute
  int max=0;            //conterrà il massimo numero di occorrenze
  for(; aux.getNext()!=null; aux=aux.getNext()) //scorro la lista
  {
   temp=aux.getNext();  //setto il nodo come successivo del nodo aux
   for (cont=1; aux.getInfo()==temp.getInfo() && temp.getNext()!=null;
aux=aux.getNext(), temp=temp.getNext(), cont++);
   //questo ciclo controlla che le informazioni dei nodi siano uguali, ed
esce quando sono diverse, nel frattempo incrementa il contatore cont.
   if (cont==max)
    { l2.insertTail(aux.getInfo()); } //se cont = max inserisco in coda a l2
l'informazione del nodo corrente
   else if (cont>max)    //altrimenti...se cont > max
    { l2.head=null; l2.insertTail(aux.getInfo()); max=cont; }//...svuoto la
lista ed inserisco l'informazione del nodo corrente nella lista l2, settando
il nuovo max = a cont
  }
  return l2; //restituisco la lista di output
 }
}
Il problema è che nel primo ciclo dovrei fare un aux!=null anzichè un
aux.getNext()!=null, ma non posso perchè mi da una eccezione, probabilmento
perchè all'interno del ciclo stesso faccio un aux=aux.getNext();
Suggerimenti? Grazie.

 Salve a tutti,
Ho ripulito il codice dai commenti, eccolo:
class esercizio1
{
 public static void main(String[] args)
 {
  lista lista1= new lista();
  int comodo=0;
  for (int i=0; i<10; i++)
    {
   comodo+=(int)(Math.random()*2);
   lista1.insertTail(comodo);
  }
                System.out.println(lista1);
  System.out.println(listaConOccorrenze(lista1));
 }
 public static lista listaConOccorrenze(lista l1)
 {
  lista l2=new lista();
  nodo aux=l1.head;
  nodo temp=null;
  int cont=1;
  int max=0;
  for(; aux.getNext()!=null; aux=aux.getNext())
  {
   temp=aux.getNext();
   for (cont=1; aux.getInfo()==temp.getInfo() && temp.getNext()!=null;
aux=aux.getNext(), temp=temp.getNext(), cont++);
   if (cont==max)
    { l2.insertTail(aux.getInfo()); }
   else if (cont>max)
    { l2.head=null; l2.insertTail(aux.getInfo()); max=cont; }
  }
  return l2;
 }
}