private void SetHeadAndTailItem(T data)
        {
            var item = new DuplexItem <T>(data);

            head  = item;
            tail  = item;
            Count = 1;
        }
 public T PopFront()
 {
     if (Count > 0)
     {
         var result  = head.Data;
         var current = head.Previous;
         current.Next = null;
         head         = current;
         Count--;
         return(result);
     }
     else
     {
         return(default(T));
     }
 }
 public T PopBack()
 {
     if (Count > 0)
     {
         var result  = tail.Data;
         var current = tail.Next;
         current.Previous = null;
         tail             = current;
         Count--;
         return(result);
     }
     else
     {
         return(default(T));
     }
 }
        public void PushFront(T data)
        {
            if (Count == 0)
            {
                SetHeadAndTailItem(data);
                return;
            }

            var item = new DuplexItem <T>(data)
            {
                Previous = head
            };

            head.Next = item;
            head      = item;
            Count++;
        }
        public void PushBack(T data)
        {
            if (Count == 0)
            {
                SetHeadAndTailItem(data);
                return;
            }

            var item = new DuplexItem <T>(data)
            {
                Next = tail
            };

            tail.Previous = item;
            tail          = item;
            Count++;
        }