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

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