예제 #1
0
        public DoubleLinkedNode(T value, IDoubleLinkedNode <T> next, IDoubleLinkedNode <T> prev)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }

            Value = value;
            Next  = next;
            Prev  = prev;
        }
예제 #2
0
        public bool Contains(T value)
        {
            IDoubleLinkedNode <T> currentNode = First;

            while (currentNode != null)
            {
                if (currentNode.Value.CompareTo(value) == 0)
                {
                    return(true);
                }

                currentNode = currentNode.Next;
            }

            return(false);
        }
예제 #3
0
        public void Reverse()
        {
            IDoubleLinkedNode <T> currentNode = First;

            while (currentNode != null)
            {
                IDoubleLinkedNode <T> tempNode = currentNode.Next;
                currentNode.Next = currentNode.Prev;
                currentNode.Prev = tempNode;
                currentNode      = tempNode;
            }

            currentNode = Last;
            Last        = First;
            First       = currentNode;
        }
예제 #4
0
        public void Reverse()
        {
            IDoubleLinkedNode <T> next, node = First;

            while (node != null)
            {
                // Меняем ссылки местами: следующий узел станет предыдущим, предыдущий станет следующим
                next      = node.Next;
                node.Next = node.Prev;
                node.Prev = next;

                node = next;
            }
            // Меняем ссылку на первый и последний узел местами
            node  = First;
            First = Last;
            Last  = node;
        }
예제 #5
0
        public void AddLast(T value)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }

            IDoubleLinkedNode <T> prev = Last;

            Last = new DoubleLinkedNode <T>(value, null, prev);

            if (prev != null)
            {
                prev.Next = Last;
            }

            First ??= Last;
        }
예제 #6
0
        public void AddFirst(T value)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }

            IDoubleLinkedNode <T> next = First;

            First = new DoubleLinkedNode <T>(value, next, null);

            if (next != null)
            {
                next.Prev = First;
            }

            Last ??= First;
        }
예제 #7
0
        public T this[int i]
        {
            get
            {
                if (i > Count - 1 || i < 0)
                {
                    throw new ArgumentOutOfRangeException();
                }

                int counter = 0;
                IDoubleLinkedNode <T> currentNode = First;
                while (counter != i)
                {
                    currentNode = currentNode.Next;
                    counter++;
                }

                return(currentNode.Value);
            }
        }