コード例 #1
0
        public void Add(T item)
        {
            if (this.head == null)
            {
                this.head = new CustomNode <T>(item);
                this.tail = this.head;
            }
            else
            {
                var newItem = new CustomNode <T>(item, tail);
                this.tail = newItem;
            }

            count++;
        }
コード例 #2
0
        public void Remove(T item)
        {
            int            currentIndex = 0;
            var            currentItem  = this.head;
            CustomNode <T> prevItem     = null;

            while (currentItem != null)
            {
                if ((currentItem.Element != null &&
                     currentItem.Element.Equals(item)) ||
                    (currentItem.Element == null) && (item == null))
                {
                    break;
                }

                prevItem    = currentItem;
                currentItem = currentItem.Next;
                currentIndex++;
            }

            if (currentItem != null)
            {
                count--;
                if (count == 0)
                {
                    this.head = null;
                }
                else if (prevItem == null)
                {
                    this.head          = currentItem.Next;
                    this.head.Previous = null;
                }
                else if (currentItem == tail)
                {
                    currentItem.Previous.Next = null;
                    this.tail = currentItem.Previous;
                }
                else
                {
                    currentItem.Previous.Next = currentItem.Next;
                    currentItem.Next.Previous = currentItem.Previous;
                }
            }
        }
コード例 #3
0
        public void Insert(T item, int index)
        {
            if (index >= ++count || index < 0)
            {
                throw new ArgumentOutOfRangeException("Index out of range!");
            }

            count++;
            var            newItem      = new CustomNode <T>(item);
            int            currentIndex = 0;
            var            currentItem  = this.head;
            CustomNode <T> prevItem     = null;

            while (currentIndex < index)
            {
                prevItem    = currentItem;
                currentItem = currentItem.Next;
                currentIndex++;
            }

            if (index == 0)
            {
                newItem.Previous   = this.head.Previous;
                newItem.Next       = this.head;
                this.head.Previous = newItem;
                this.head          = newItem;
            }
            else if (index == count - 1)
            {
                newItem.Previous = this.tail;
                this.tail.Next   = newItem;
                newItem          = this.tail;
            }
            else
            {
                newItem.Next         = prevItem.Next;
                prevItem.Next        = newItem;
                newItem.Previous     = currentItem.Previous;
                currentItem.Previous = newItem;
            }
        }
コード例 #4
0
        public void RemoveAt(int index)
        {
            if (this.IndexIsOutOfRange(index))
            {
                throw new ArgumentOutOfRangeException("Index out of range!");
            }

            int            currentIndex = 0;
            var            currentItem  = this.head;
            CustomNode <T> prevItem     = null;

            while (currentIndex < index)
            {
                prevItem    = currentItem;
                currentItem = currentItem.Next;
                currentIndex++;
            }

            if (this.count == 0)
            {
                this.head = null;
            }
            else if (prevItem == null)
            {
                this.head          = currentItem.Next;
                this.head.Previous = null;
            }
            else if (index == count - 1)
            {
                prevItem.Next = currentItem.Next;
                tail          = prevItem;
                currentItem   = null;
            }
            else
            {
                prevItem.Next             = currentItem.Next;
                currentItem.Next.Previous = prevItem;
            }

            count--;
        }
コード例 #5
0
 public CustomLinkedList()
 {
     this.head  = null;
     this.tail  = null;
     this.count = 0;
 }
コード例 #6
0
 public void Clear()
 {
     this.head  = null;
     this.tail  = null;
     this.count = 0;
 }