/*********************** LinkedListTest.java  *********************************/
import AlgoTools.IO;
import java.util.*;
/** testet die Klasse java.util.LinkedList                                    */

public class LinkedListTest {
  public static void main (String [] argv) {
    Person        p1 = new Person("Lars","Lehmann",12,6,1970);
    Person        p2 = new Person("Hans","Hutmann",21,7,1974);
    Person        p3 = new Person("Susi","Sorglos",18,3,1969);
    List <Person> l  = new LinkedList <Person> ();

    // Einfuegeoperationen, jeweils am Ende der Liste 
    if (l.add(p1)) IO.println("Einfuegen von " + p1 + " in LinkedList positiv");
              else IO.println("Einfuegen von " + p1 + " in LinkedList negativ");
    if (l.add(p2)) IO.println("Einfuegen von " + p2 + " in LinkedList positiv");
              else IO.println("Einfuegen von " + p2 + " in LinkedList negativ");
    if (l.add(p3)) IO.println("Einfuegen von " + p3 + " in LinkedList positiv");
              else IO.println("Einfuegen von " + p3 + " in LinkedList negativ");
    if (l.contains(p1)) IO.println(p1 + " wurde in LinkedList gefunden");
                   else IO.println(p1 + " wurde in LinkedList nicht gefunden");
   
    Person p4 = l.get(0);
    IO.println("An Position 0 befindet sich " + p4);

    int i = l.indexOf(p1);
    IO.println(p1 + " befindet sich an Position " + i);

    l.add(i,p1);
    IO.println(p1 + " wurde an Position " + i + " gespeichert ");
    
    IO.println("Die LinkedList wird aufgelistet mit println:");
    IO.println(l);

    IO.println(p1 + " wird aus der Liste entfernt");
    l.remove(p1);

    IO.println("Die LinkedList wird durchlaufen mit for-Schleife: ");
    for (Person p:l) IO.println(p); 

    IO.println("Die LinkedList wird mit ListIterator durchlaufen");
    IO.println("Dabei wird " + p3 + " entfernt");

    ListIterator <Person> iter = l.listIterator();    // besorge ListIterator
    while (iter.hasNext()) {                          // solange Nachfolger da 
      Person p = iter.next();                         // naechste Person
      if (p.equals(p3)) iter.remove();                // p3 entfernen
                   else IO.println(p);                // ausgeben
    }
    while (iter.hasPrevious()) {                      // solange Vorgaenger da
      Person p = iter.previous();                     // Vorgaenger besorgen 
      IO.println(p);                                  // Person ausgeben
    }
  }
}
