class node { protected Object content; private node next; /* Konstruktor */ node (Object o) { this.content = o; this.next = null; } public void setNext (node succ) { next = succ; } public node getNext () { return next; } } public class list { private node head; private node tail; private boolean empty; list () { // Konstruktor head = null; tail = null; empty = true; } /* gebe den Inhalt des ersten Elementes aus */ public Object first () { if (!empty) { return head.content; } else { return null; } } /* gebe den Inhalt des letzten Elementes aus */ public Object last () { if (!empty) { return tail.content; } else { return null; } } /* teste, ob die Liste leer ist */ public boolean isEmpty () { return empty; } /* fuege am Ende der Liste ein neues Element an */ public void append (Object o) { node newNode = new node (o); if (empty) { tail = newNode; head = newNode; empty = false; } else { tail.setNext(newNode); tail = newNode; } } /* fuege am Anfang der Liste ein neues Element an */ public void insert (Object newObject) { node newNode = new node(newObject); if (empty) { tail = newNode; head = newNode; empty = false; } else { newNode.setNext(head); head = newNode; } } /* entferne das erste Element und gebe es zurueck */ public Object removeFirst () { if (!empty) { node first = head; if (head == tail) { head = tail = null; empty = true; } else { head = head.getNext (); } return first.content; } else { return null; } } }