/******************************************************************
 * ADS1 Serie 02 Aufgabe 3.a)
 * Implementierung einer Verketteten Liste
 *
 * Arne Brutschy, 8964813, Uni Leipzig
 *****************************************************************/
public class VerketteteListe {
  ListenElement  head;
  ListenElement  tail;

  public VerketteteListe() {
    this.head= new ListenElement();
    this.tail= new ListenElement();
    this.head.setNext(tail);
    this.tail.setNext(head);
  }

  public VerketteteListe(VerketteteListe Init) {
    this.head= new ListenElement();
    this.tail= new ListenElement();
    
    ListenElement i= Init.head.getNext();
    ListenElement j= this.head;
    while (!i.equals(Init.tail)) {
      j.setNext(new ListenElement(i.getData()));
      j= j.getNext();
      i= i.getNext();
    }
    j.setNext(this.tail);
    this.tail.setNext(j);

    return this;
  }

  public VerketteteListe Insert(Object data) {
    ListenElement neues= new ListenElement(data);
    
    neues.setNext(this.head.getNext());
    this.head.setNext(neues);
    return this;
  }

  public VerketteteListe Delete(Object data) {
    ListenElement  i= this.head.getNext();
    ListenElement  last= this.head;

    while (!i.equals(this.tail)) {
      if (i.getData().equals(Object)) {
        last.setNext(i.getNext());
        return this;
      }

      last= i;
      i= i.getNext();
    }
    return this;
  }

  public boolean Search(Object data) {
    ListenElement  i= this.head.getNext();
    ListenElement  last= this.head;

    while (!i.equals(this.tail)) {
      if (i.getData().equals(Object))
        return true;

      last= i;
      i= i.getNext();
    }
    return false;
  }

  public boolean Empty() {
    return this.tail.getNext().equals(this.head);
  }
}

