/// <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); }
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--; }