Пример #1
0
        public void Add(object value)
        {
            LinkedItem addedItem = new LinkedItem { Value = value, Next = null };
            if (_last == null)
            {
                _last = addedItem;
                _last.Previous = null;
                //keep track of that very first item to make it easy to traverse the list
                _start = _last;
                return;
            }

            _last.Next = addedItem;
            addedItem.Previous = _last;
            _last = addedItem;
        }
Пример #2
0
        //public override string ToString()
        //{
        //    StringBuilder strBuilder = new StringBuilder();
        //    LinkedItem currentItem = _start;
        //    while (currentItem != null )
        //    {
        //        if (strBuilder.Length > 0)
        //            strBuilder.Append(", ");
        //        strBuilder.Append(currentItem.ToString());
        //        currentItem = currentItem.Next;
        //    }
        //    return strBuilder.ToString();
        //}
        private void insertBefore(LinkedItem targetItem, LinkedItem itemTobeAdded)
        {
            if (targetItem == null)
                return;

            LinkedItem previousItem = targetItem.Previous;

            previousItem.Next = itemTobeAdded;
            itemTobeAdded.Next = targetItem;
            targetItem.Previous = itemTobeAdded;
        }
Пример #3
0
        public void Reverse()
        {
            LinkedItem currentItem = _last;
            _last = _start;
            _start = currentItem;

            while (currentItem != null)
            {
                LinkedItem previousItem = currentItem.Previous;
                currentItem.Previous = currentItem.Next;
                currentItem.Next = previousItem;
                currentItem = previousItem;
            }
        }
Пример #4
0
        public object Pop()
        {
            if (_last == null)
                return null;

            object poppedValue = _last.Value;
            _last = _last.Previous;
            _last.Next = null;
            return poppedValue;
        }
Пример #5
0
        public void ConstrainedReverse()
        {
            //if our list was truly a linked list not a double linked list
            LinkedItem currentItem = _start;
            LinkedItem previousItem = null;
            _last = _start;

            while (currentItem != null)
            {
                _start = currentItem;
                var nextItem = currentItem.Next;
                currentItem.Next = previousItem;
                previousItem = currentItem;
                currentItem = nextItem;
            }
        }
Пример #6
0
        public void AddAt(object value, int index)
        {
            LinkedItem currentItem = getAt(index);
            LinkedItem itemToAdd = new LinkedItem { Value = value };

            if (currentItem == null)
                throw new ArgumentException("Index provided is invalid: list does not have that many items in it");

            insertBefore(currentItem, itemToAdd);
        }