
import java.awt.Font;
import java.io.File;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Random;
import java.util.Scanner;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;


/**
 *
 * @author Bill Kraynek
 */
public class JavaLinkedListExample {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        LinkedList<String> stringList = new LinkedList<String>();
        try {
            Scanner fileScanner = new Scanner(new File("src/SingleLinkedListExample.java"));
            fileScanner.useDelimiter("[^a-zA-Z]+");
            while (fileScanner.hasNext()) {
                String aWord = fileScanner.next();
                ListIterator<String> itr = stringList.listIterator();
                boolean found = false;
                while ( itr.hasNext() ) {
                    if (aWord.equals(itr.next())) {
                        found = true;
                        break;
                    }// end if
                }// end while
                if ( !found ) {
                    itr.add(aWord);
                }// end if
            } // end while
        } catch (Exception e) {
            e.printStackTrace();
        } // end try/catch
        String out = "\t" + display(stringList);
        JTextArea outArea = new JTextArea(25, 40);
        outArea.setFont(new Font(Font.MONOSPACED, Font.BOLD, 15));
        outArea.setText(out);
        JOptionPane.showMessageDialog(null, new JScrollPane(outArea));
        Random random = new Random();
        LinkedList<Integer> intList = new LinkedList<Integer>();
        for(int i = 0; i < 20; i++) {
            intList.add(random.nextInt(1000));
        }// end for
        out = "\t" + display(intList);
        out += "\n\tSum of ints\n\t"+ sum(intList);
        outArea.setText(out);
        JOptionPane.showMessageDialog(null, new JScrollPane(outArea));
    }
    static <T> String display(List<T> list) {
        String out = "";
        for(T x : list) {
            out += x + "\n\t";
        }
        return out;
        //return display(list.listIterator());
    }
    static <T> String display(ListIterator<T> itr) {
        if( !itr.hasNext() ) return "";
        return itr.next() + "\n\t" + display(itr);
    }
    static int sum(List<Integer> list) {
        return sum(list.listIterator());
    }
    static int sum(ListIterator<Integer> itr) {
        if( !itr.hasNext()) return 0;
        return itr.next() + sum(itr);
    }

}

