/*
 * โครงสร้างข้อมูล : ฉบับวาจาวา
 * http://www.cp.eng.chula.ac.th/~somchai/books
 */
package dataStructures;

/**
 * คลาสที่สร้างคอลเล็กชันด้วยการโยงปมข้อมูลแบบมีปมห้ว
 * @author สมชาย ประสิทธิ์จูตระกูล
 */
public class LinkedCollectionWithHeader implements Collection {
  private static class LinkedNode {
    Object element;
    LinkedNode next;
    LinkedNode(Object e, LinkedNode next) {
      this.element = e;
      this.next = next;
    }
  }
  private LinkedNode header = new LinkedNode(null, null);
  private int size;
  
  public LinkedCollectionWithHeader() {}
  public int size() {
    return size;
  }
  public boolean isEmpty() {
    return size == 0;
  }
  public void add(Object e) {
    header.next = new LinkedNode(e, header.next);
    ++size;
  }
  public boolean contains(Object e) {
    LinkedNode node = header.next;
    while( node != null ) {
      if (node.element.equals(e)) return true;
      node = node.next;
    }
    return false;   
  }
  public void remove(Object e) {
    LinkedNode p = header;
    while( p.next != null &&
           ! p.next.element.equals(e)) {
      p = p.next;
    }
    if (p.next != null) {
      p.next = p.next.next; --size;
    }
  }
  public Object[] toArray() {
    Object[] arr = new Object[size];
    LinkedNode p = header.next;
    int k = 0;
    while (p != null) {
      arr[k++] = p.element;
      p = p.next;
    }
    return arr;
  }
  
}