public void AddValue(T value)
        {
            CollectionNode <T> node = new CollectionNode <T>(value);

            if (tail == null)
            {
                head = tail = node;
            }
            else
            {
                tail = tail.Next = node;
            }
        }
 public ConcreteCollectionEnumerator(ConcreteCollection <T> owner)
 {
     this.owner       = owner;
     this.currentNode = null;
 }
 void IEnumerator.Reset()
 {
     currentNode = null;
 }
 public ConcreteCollection()
 {
     this.head = null;
     this.tail = null;
 }
 bool IEnumerator.MoveNext()
 {
     currentNode = currentNode != null ? currentNode.Next : owner.Head;
     return(currentNode != null);
 }