Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Problema con lista concatenata

0 views
Skip to first unread message

Anthares

unread,
Apr 7, 2006, 5:42:58 PM4/7/06
to
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.

Anthares

unread,
Apr 7, 2006, 5:49:06 PM4/7/06
to

"Anthares" <ste...@email.it> ha scritto nel messaggio
news:4436dd0f$0$29731$4faf...@reader2.news.tin.it...
> 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;
}
}


0 new messages