public void AddLast(ValueType value)
        {
            DoubleLinkedNode <ValueType> node = new DoubleLinkedNode <ValueType>(value);

            if (0 == Count)
            {
                First = node;
            }
            else
            {
                node.Previous      = Last;
                node.Previous.Next = node;
            }
            Last = node;
            Count++;
        }
 public void RemoveNode(DoubleLinkedNode <ValueType> node)
 {
     if (First.Equals(node))
     {
         RemoveFirst();
     }
     else if (Last.Equals(node))
     {
         RemoveLast();
     }
     else
     {
         DoubleLinkedNode <ValueType> temp = node.Previous;
         node.Previous.Next = node.Next;
         node.Next.Previous = temp;
         Count--;
     }
 }
 public bool Equals(DoubleLinkedNode <ValueType> other) => CompareTo(other) == 0;
        public override bool Equals(object obj)
        {
            DoubleLinkedNode <ValueType> other = obj as DoubleLinkedNode <ValueType>;

            return((null == other) ? false : Equals(other));
        }
 public DoubleLinkedNode(ValueType value, DoubleLinkedNode <ValueType> previous = null, DoubleLinkedNode <ValueType> next = null)
 {
     Value    = value;
     Previous = previous;
     Next     = next;
 }