// sl-4-BA : Der ADT Liste

#include "liste.h"

struct Liste {
  DataType value;
  ListenPtr next;
};

void empty(ListenPtr & l) {
  while (!is_empty(l)) { removeFirst(l); }
  // l = 0; würde auch funktionieren, Speicher würde aber nicht freigegeben
}

bool is_empty(const ListenPtr l) {
  return l==0; // Kurzform von if (l==0) { return true; } else { return false; }
}

void insert(ListenPtr & l, const DataType value) { // Aufgabe:
  // ändern Sie die Funktion so ab, dass <value> sortiert in <l> eingefügt wird!
  ListenPtr node = new Liste;
  node->value = value;
  node->next = l;
  l = node;
}

void removeFirst(ListenPtr & l) { // l darf nicht 0 sein!
  // die aufrufende Funktion muss ggf. mit is_empty(l) prüfen, ob l leer ist
  ListenPtr tbd = l; // Zeiger für oberstes Element merken
  l = l->next;
  delete tbd;
}

DataType head(const ListenPtr l) { // l darf nicht 0 sein!
  // die aufrufende Funktion muss ggf. mit is_empty(l) prüfen, ob l leer ist
  return l->value;
}
