Soluzione 8.2

Da notare:
import java.io.FileReader;
import java.io.IOException;

import java.util.Scanner;

public class LinkedListTester
{   public static void main(String[] args) throws IOException
    {   // verifica argomenti su line di comando
        if (args.length != 1)
        {   System.out.println("uso: $java LinkedListTester nomeFile");
            System.exit(1);
        }

        List list1 = new LinkedList(); //prima lista (di tipo LinkedList)
        //List list1 = new ArrayList();  //prima lista (di tipo ArrayList)
        ListIterator iter1 = list1.getIterator(); //creo un iteratore su list1

        //leggo dati da file e li scrivo nella lista list1
        Scanner in = new Scanner(new FileReader(args[0]));
        while (in.hasNextLine())  //leggo righe di file
        {   Scanner linescan = new Scanner(in.nextLine());  //questo Scanner usa 
            linescan.useDelimiter(",");//solo la "," come delimitatore
            while (linescan.hasNext())
                iter1.add(linescan.next());  //aggiungo i token nella lista 
        }                                //con il metodo add dell'iteratore
        in.close();

        List list2 = new LinkedList(); //seconda lista (di tipo LinkedList)
        //List list2 = new ArrayList();  //seconda lista (di tipo ArrayList)

        listCopy(list1, list2);    //Copio in list2 i dati di list1 (listCopy e`
                              //un metodo statico ausiliario scritto piu` sotto)

        //Stampo il contenuto delle liste: uso due iteratori per scorrere
        //le liste dall'inizio alla fine
        System.out.println("\n*** Lista 1 ***");
        iter1 = list1.getIterator();
        while (iter1.hasNext())
            System.out.println(iter1.next());

        System.out.println("\n*** Lista 2 ***");
        ListIterator iter2 = list2.getIterator();
        while (iter2.hasNext())
            System.out.println(iter2.next());

        // svuotamento e verifica della prima lista
        iter1 = list1.getIterator();
        while (iter1.hasNext())
        {   iter1.next();
            iter1.remove();
        }
        System.out.println("\n*** Lista 1 dopo svuotamento ***");
        iter1 = list1.getIterator();
        while (iter1.hasNext())
            System.out.println(iter1.next());

        // svuotamento e verifica della seconda lista
        iter2 = list2.getIterator();
        while (iter2.hasNext())
        {   iter2.next();
            iter2.remove();
        }
        System.out.println("\n*** Lista 2 dopo svuotamento ***");
        iter2 = list2.getIterator();
        while (iter2.hasNext())
            System.out.println(iter2.next());
    }

    //Metodo statico ausiliario: copia il contenuto di una lista su un'altra
    public static void listCopy(List from, List to)
    {   if(from == to) return; //le due liste sono lo stesso oggetto

        to.makeEmpty(); //Vuoto la seconda
        ListIterator fromItr = from.getIterator();
        ListIterator toItr = to.getIterator();
        while (fromItr.hasNext())
            toItr.add(fromItr.next());
    }
}