public void InsertAt(DoublyLinkedKeyValue <K, V> element, int position)
        {
            if (Count == 0)
            {
                first = element;
                last  = element;
                Count++;
                return;
            }
            if (position == Count)
            {
                last.Next        = element;
                element.Previous = last;
                last             = element;
                Count++;
                return;
            }

            DoublyLinkedKeyValue <K, V> iterator = first;
            int i = 0;

            while (i++ < position)
            {
                iterator = iterator.Next;
            }

            iterator.Previous.Next = element;
            element.Previous       = iterator.Previous;
            element.Next           = iterator;
            iterator.Previous      = element;

            Count++;
        }
        public DoublyLinkedKeyValue <K, V> getElement(K element)
        {
            DoublyLinkedKeyValue <K, V> iterator = first;

            while (!iterator.ID.Equals(element))
            {
                iterator = iterator.Next;
            }

            return(iterator);
        }
        public DoublyLinkedKeyValue <K, V> getElementAt(int position)
        {
            DoublyLinkedKeyValue <K, V> iterator = first;
            int i = 0;

            while (i++ < position)
            {
                iterator = iterator.Next;
            }

            return(iterator);
        }
        public void InserBefore(DoublyLinkedKeyValue <K, V> old, DoublyLinkedKeyValue <K, V> novo)
        {
            if (old == first)
            {
                InserBeforeFirst(novo);
            }

            DoublyLinkedKeyValue <K, V> iterator = first;
            int i = 0;

            while (!iterator.Equals(old))
            {
                iterator = iterator.Next;
                i++;
            }

            InsertAt(novo, i);
        }
        public void InserAfter(DoublyLinkedKeyValue <K, V> old, DoublyLinkedKeyValue <K, V> novo)
        {
            if (old == last)
            {
                Add(novo);
            }

            DoublyLinkedKeyValue <K, V> iterator = first;
            int i = 0;

            while (!iterator.Equals(old))
            {
                iterator = iterator.Next;
                i++;
            }

            InsertAt(novo, i + 1);
        }
        public void removeElementAt(int position)
        {
            if (Count == 1)
            {
                last  = null;
                first = null;

                Count--;
                return;
            }

            DoublyLinkedKeyValue <K, V> iterator = first;
            int i = 0;

            while (i++ < position)
            {
                iterator = iterator.Next;
            }

            iterator.Previous.Next = iterator.Next;
            iterator.Next.Previous = iterator.Previous;

            Count--;
        }
 public void InserBeforeFirst(DoublyLinkedKeyValue <K, V> element)
 {
     InsertAt(element, 0);
 }
 public void Add(DoublyLinkedKeyValue <K, V> element)
 {
     InsertAt(element, Count);
 }