Pages: [1]   Go Down
Print
Author Topic: altro esercizio sulle liste linkate  (Read 2096 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
rox
Forumista
***
Offline Offline

Posts: 633


« on: 04-04-2009, 07:22:24 »

salve colleghi avrei un problema con questo esercizio ,sapreste trovare una soluzione?
si deve creare un metodo che prenda in input 2 liste linkate e ristituisca una lista linkata tale che contenga tutti gli elementi gli della prima lista che non sono presenti nella seconda lista.
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
KingDavid
Forumista
***
Offline Offline

Posts: 788


Alla fine [...] tutta la realtà è binaria.


« Reply #1 on: 04-04-2009, 14:20:36 »

salve colleghi avrei un problema con questo esercizio ,sapreste trovare una soluzione?
si deve creare un metodo che prenda in input 2 liste linkate e ristituisca una lista linkata tale che contenga tutti gli elementi gli della prima lista che non sono presenti nella seconda lista.

Nel metodo che crei, dopo aver creato una nuova lista, devi scorrere tutti gli elementi della prima lista e per ognuno di essi controlli che non è presente nella seconda lista, se questa condizione è verificata allora puoi aggiungere quell'elemento nella nuova lista.
Logged

Basti pensare che un ipotetico quadrato di specchi, lungo 200 chilometri per ogni lato, potrebbe produrre tutta l'energia necessaria all'intero pianeta.
(Carlo Rubbia)
rox
Forumista
***
Offline Offline

Posts: 633


« Reply #2 on: 04-04-2009, 14:58:09 »

lo so ma è + facile a dirsi che a farsi.tu hai provato a risolverlo?
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
Zeridos
Forumista
***
Offline Offline

Gender: Male
Posts: 705


The Original


« Reply #3 on: 04-04-2009, 15:25:28 »

basta crearsi un metodo cercaNodo dentro la classe LList che dato un ListNode x lo cerca e torna 1 se lo trova o 0 se non lo trova:
Code:
   
public boolean cercaNodo(ListNode x) //1 = presente, 0 = non presente
    {
ListNode aux;
    for(aux=head;aux!=null;aux=aux.getNext())
               if(aux.getInfo()==x.getInfo()) //<-- esempio generico, in base al tipo dell'info va modificato
                    return 1;                              // con il relativo controllo di uguaglianza
     
         return 0; // se esce dal for e non ha trovato niente vul dire che non c'e'
        }   
   
    }

Avendo le LList "uno" e "due" gia' complete e dovendo creare la lista "nuovo" ti basta fare un for simile nel main:
Code:
        LList nuovo = new LList();
        ListNode app;
for(app=uno.getHead();app!=null;app=app.getNext())
if(!due.cercaNodo(app))
nuovo.insertTail(uno.getInfo());

Spiegando a parole, per ogni elemento della lista uno la lista due controlla se e' presente un nodo con la stessa informazione (tramite la funzione apposita) e se non c'e' allora lo inserisco nella nuova lista.

Spero di non aver sbagliato niente Cheesy

Ciauz

EDIT: Avevo inserito un controllo superfluo in + Cheesy
« Last Edit: 04-04-2009, 15:36:31 by Zeridos » Logged

I love penguins, dead ones...
rox
Forumista
***
Offline Offline

Posts: 633


« Reply #4 on: 04-04-2009, 22:15:51 »

infatti io ho fatto così ma l'esercizio non riesce!!qualcuno potrebbe postare il codice corretto?
almeno così capisco quali errori ho commesso. non riesco a venirne a capo.
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
feboss
Guest
« Reply #5 on: 05-04-2009, 01:00:43 »

Code:
public boolean trovab(E val)
    {
        Nodo<E> Temp = Testa;
        for(;Temp!=null && Temp.getInfo().compareTo(val)!=0;Temp=Temp.getNext())
            ;
        if(Temp==null)
            return false;
        return true;     
    }
Code:
public class esercizio
{
    public static void main(String[] args)
    {
        Lista lista1 = new Lista();
        Lista lista2 = new Lista();

        for (int i = 0; i < 50; i++)
            lista1.inserisciTesta(i * 10);
        for (int i = 30; i < 70; i++)
            lista2.inserisciTesta(i * 10);
        metodo(lista1, lista2).stampa();
    }

    static Lista metodo(Lista lista1, Lista lista2)
    {
        Lista lista3 = new Lista();
        for(Nodo<Integer> temp = lista1.getTesta();temp!=null;temp=temp.getNext())
             if (!lista2.trovab(temp.getInfo()))
                lista3.inserisciTesta(temp.getInfo());

        return lista3;
    }
}
« Last Edit: 05-04-2009, 01:04:32 by feboss » Logged
Zeridos
Forumista
***
Offline Offline

Gender: Male
Posts: 705


The Original


« Reply #6 on: 05-04-2009, 09:21:49 »

Ok avevo scritto male il nome di una variabile, invece del nodo avevo usato la lista, cmq ti riposto il codice:
Code:
LList nuovo = new LList();
        ListNode app;
        for(app=uno.getHead();app!=null;app=app.getNext())
if(!due.cercaNodo(app))
nuovo.insertTail(app.getInfo());
e nella LList metti:
Code:
public boolean cercaNodo(ListNode x) //true = presente, false = non presente
    {
ListNode aux;
    for(aux=head;aux!=null;aux=aux.getNext())
               if(aux.getInfo().equalsIgnoreCase(x.getInfo())) //confrontro tra stringhe
                    return true;                             
     
         return false; // se esce dal for e non ha trovato niente vul dire che non c'e'
        }

L'ho creato per un confronto tra stringhe, quindi nel main la creazione delle liste e':
Code:
       LList uno = new LList();
LList due = new LList();
 for (int i = 0; i < 50; i++)
        uno.insertTail(i+"");
        for (int i = 30; i < 70; i++)
        due.insertTail(i+"");

Ciauz

EDIT: Cmq ti aggiungo il file zip del programma completo di LList e ListNodo, non vorrei avessi quelli diversi.
http://www.mediafire.com/download.php?u3zxtm2yqnn

« Last Edit: 05-04-2009, 09:52:20 by Zeridos » Logged

I love penguins, dead ones...
Pages: [1]   Go Up
Print
Jump to: