public bool RemoveFirst(out T savedFirstValue)
        {
            savedFirstValue = default(T);
            if (First is null)
            {
                return(false);
            }

            savedFirstValue = First.Data;
            if (First.Next == First)
            {
                First = null;
            }
            else
            {
                First.Next.Previous = Last;
                Last.Next           = First.Next;
                if (First == First)
                {
                    First = First.Next;
                }
            }
            _count--;
            return(true);
        }
 public CustomLinkedListEnumerator(CustomCircularDualLinkLinkedList <T> list)
 {
     _list   = list;
     _node   = list.First;
     Current = default(T);
     _index  = 0;
 }
        public void AddLast(T data)
        {
            CustomDuelLinkLinkedListNode <T> newLast = new CustomDuelLinkLinkedListNode <T>(data)
            {
                Next     = First,
                Previous = Last
            };

            Last.Next      = newLast;
            First.Previous = newLast;
            _count++;
        }
            public bool MoveNext()
            {
                if (_node == null)
                {
                    _index = _list.Count;
                    return(false);
                }

                _index++;
                Current = _node.Data;
                _node   = _node.Next;
                if (_node == _list.First)
                {
                    _node = default(CustomDuelLinkLinkedListNode <T>);
                }
                return(true);
            }
        public void AddFirst(T data)
        {
            CustomDuelLinkLinkedListNode <T> newFirst = new CustomDuelLinkLinkedListNode <T>(data);

            if (First is null)
            {
                newFirst.Next     = newFirst;
                newFirst.Previous = newFirst;
            }
            else
            {
                newFirst.Next     = First;
                newFirst.Previous = Last;
                Last.Next         = newFirst;
                First.Previous    = newFirst;
            }
            First = newFirst;
            _count++;
        }
 public void Reset()
 {
     Current = default(T);
     _node   = _list.First;
     _index  = 0;
 }