/media/sda-magnetic/david/Extern-Magnetic-2022-06-29/Extern01/Dokumente-2020-11-16/disk10-ab-2020-01-10/02-debian-pc2-work/informatik/java-new/test-param-2020-11-16-2/TestParam02.java


public class TestParam02 {
    TestParam02() {
        LinkedList1618<String> test = new LinkedList1618<String> (); 
    }
    
    class LinkedList1618<ET> {
    private Entry header = new Entry(null, null, null); /**/

    private int size = 0;

    public LinkedList1618() {
        header.next = header;
        header.previous = header;
    }

    public ET getLast() {
        if (size == 0) throw new java.util.NoSuchElementException();
        return header.previous.element;
    }

    public ET removeLast() {
        Entry lastEntry = header.previous; /**/
        if (lastEntry == header) throw new java.util.NoSuchElementException();
        lastEntry.previous.next = lastEntry.next;
        lastEntry.next.previous = lastEntry.previous;
        size--;
        return lastEntry.element;
    }

    public void addLast(ET e) {
        Entry newEntry = new Entry(e, header, header.previous); /**/
        header.previous.next = newEntry;
        header.previous = newEntry;
        size++;
    }

    public int size() {
        return size;
    }

    private class Entry { /**/
    
    /* Das static muss raus - hier habe ich es entfernt - vorher stand hier ein static */
    /* Anmerkung: Damit es möglich ist, eine Klasse als nicht static zu definieren - jetzt von der Praxis her - darf sie nicht innerhalb einer statischen Klasse definiert werden.
    Nun muss aber unsere main()-Methode static sein.
    public static void main (String [] args) {...}
    Diese kann nur statische Klassen aufrufen, wenn sie in derselben Klasse - dem Programm, wie main() definiert sind. Also müssen die anderen Klassen in einer anderen Programmklasse definiert werden, dann müssen sie nicht static sein - natürlich geht das, man schaue String an */
    /* Nun kann man in der Datei in der die Hauptprogrammklasse definiert wurde, nicht noch andere Klasse definieren, deswegen muss man sie auf mehrere (*.java)-Dateien verteilen */
        private ET element; /**/

        private Entry next; /**/

        private Entry previous; /**/

        private Entry(ET element, Entry next, Entry previous) { /**/
            this.element = element;
            this.next = next;
            this.previous = previous;
        }
    }

    public class ListIterator {
        private int nextIndex = 0;

        private Entry next = header.next; /**/

        boolean hasNext() {
            return nextIndex != size;
        }

        ET next() {
            if (nextIndex == size) throw new java.util.NoSuchElementException();
            ET elem = next.element;
            next = next.next;
            nextIndex++;
            return elem;
        }
    }

    public ListIterator listIterator() {
        return new ListIterator();
    }
}
}