Exemple #1
0
        /// <summary>
        /// Get Item at specified index
        /// </summary>
        /// <param name="index">the index to return item</param>
        /// <returns>item at the specified index</returns>
        public T Get(int index)
        {
            if (index > _length - 1)
            {
                throw new IndexOutOfRangeException();
            }

            ParentAwareNode <T> node = _head;

            int i        = 0;
            int midpoint = GetMidPointIndex();

            if (index > midpoint)
            {
                node = _last;
                // find starting at end
                i = _length - 1;
                while (i > index)
                {
                    node = node.Previous() as ParentAwareNode <T>;
                    i--;
                }
            }
            else
            {
                while (i < index)
                {
                    node = node.Next() as ParentAwareNode <T>;
                    i++;
                }
            }

            return(node.Value);
        }
Exemple #2
0
        private void DeleteNode(ParentAwareNode <T> node)
        {
            if (node.Previous() == null)
            {
                _head = node;
            }
            else
            {
                (node.Previous() as IChildableNode <T>).SetChild(node.Next());
            }

            if (node.Next() == null)
            {
                _last = node;
            }
            else
            {
                (node.Next() as ParentAwareNode <T>).SetParent(node.Previous());
            }
            _length--;
        }