package verketteteListen;

public class Liste {
  private Node anker = null;
  private Node last = null;
 
  /**
   * hängt Knoten n am Ende der Liste an (für Queue).
   * 
   * @param n
   *          neuer Knoten
   */
  public void put(Node n) {
    if (last == null) { // erstes Element
      anker = n;
      last = n;
    } else {
      last.next = n;
      last = n;
    }
  }
 
  /**
   * liefert erstes Element und entfernt dieses aus der Liste
   * 
   * @return erster Knoten oder null
   */
  public Node get() {
    Node ret = null;
    if (anker != null) {
      ret = anker;
      anker = anker.next;
      if (anker == null) { // war das das letzte Element?
        last = null;
      }
    }
    return ret;
  }
 
  /**
   * pop() für Verwendung als Stack.
   * 
   * @return erstes Element
   */
  public Node pop() {
    return get();
  }
 
  /**
   * fügt Knoten vorne ein (für Stack).
   * 
   * @param n
   *          neuer Knoten
   */
  public void push(Node n) {
    if (anker == null) {
      anker = n;
      last = anker;
    } else {
      n.next = anker;
      anker = n;
    }
  }
 
  /**
   * liefert Liste als String.
   * 
   * @return "[erstes,zweites,...]", "[]" bei leerer Liste (KEINE Leerzeichen)
   */
  public String toString() {
    String ret = "[";
    Node n;
    for (n = anker; n != null && n.next != null; n = n.next) {
      ret += n + ",";
    }
    if (n != null) {
      ret += n;
    }
    ret += "]";
    return ret;
  }
}
