Exemple #1
0
        public int Get(int idx) // вернёт значение элемента списка с указанным индексом
        {
            DoublyNode current = head;
            int        count   = 0;

            while (count != idx)
            {
                current = current.next;
                count++;
            }
            return(current.value);
        }
Exemple #2
0
        public void RemoveLast() // удаление последнего элемента
        {
            if (head == null)
            {
                return;
            }

            tail.previous.next = tail.next;
            tail = tail.previous;

            size--;
        }
Exemple #3
0
        public void Set(int idx, int val)  // поменять значение элемента с указанным индексом
        {
            DoublyNode current = head;
            int        count   = 0;

            while (count != idx)
            {
                current = current.next;
                count++;
            }
            current.value = val;
        }
Exemple #4
0
        public int IndexOf(int val)  // вернёт индекс первого найденного элемента, равного val(или -1, если элементов с таким значением в списке нет)
        {
            int count = 0;

            for (DoublyNode current = head; current != null; current = current.next, count++)
            {
                if (val.Equals(current.value))
                {
                    return(count);
                }
            }
            return(-1);
        }
Exemple #5
0
        public int[] ToArray() // преобразовать список в массив
        {
            DoublyNode current = head;
            int        count   = 0;

            int[] arr = new int[size];
            while (current != null)
            {
                arr[count] = current.value;
                current    = current.next;
                count++;
            }
            return(arr);
        }
Exemple #6
0
        public bool Contains(int val) // проверка, есть ли элемент в списке
        {
            DoublyNode current = head;

            while (current != null)
            {
                if (current.value == val)
                {
                    return(true);
                }
                current = current.next;
            }
            return(false);
        }
Exemple #7
0
        public void AddLast(int val) // добавление в конец списка
        {
            DoublyNode node = new DoublyNode(val);

            if (head == null)
            {
                head = node;
            }
            else
            {
                tail.next     = node;
                node.previous = tail;
            }
            tail = node;
            size++;
        }
Exemple #8
0
        public void AddFirst(int val) // добавление в начало списка
        {
            DoublyNode node = new DoublyNode(val);
            DoublyNode temp = head;

            node.next = temp;
            head      = node;
            if (size == 0)
            {
                tail = head;
            }
            else
            {
                temp.previous = node;
            }
            size++;
        }
Exemple #9
0
        public void Reverse() // изменение порядка элементов списка на обратный
        {
            DoublyNode tmp  = null;
            DoublyNode curr = head;

            while (curr != null)
            {
                tmp           = curr.previous;
                curr.previous = curr.next;
                curr.next     = tmp;
                curr          = curr.previous;
            }

            if (tmp != null)
            {
                head = tmp.previous;
            }
        }
Exemple #10
0
        public void AddAt(int idx, int val) // вставка по указанному индексу
        {
            DoublyNode node = new DoublyNode(val);

            if (idx == 0)
            {
                DoublyNode temp = head;
                node.next = temp;
                head      = node;
                if (size == 0)
                {
                    tail = head;
                }
                else
                {
                    temp.previous = node;
                }
            }
            else if (idx == size)
            {
                tail.next     = node;
                node.previous = tail;
                tail          = node;
            }
            else
            {
                DoublyNode currentNode = head;
                DoublyNode temp;
                int        count = 0;
                while (count != idx)
                {
                    currentNode = currentNode.next;
                    count++;
                }
                temp                      = currentNode;
                node.previous             = temp.previous;
                currentNode.previous.next = node;
                node.next                 = currentNode;
                currentNode.previous      = node;
            }
            size++;
        }
Exemple #11
0
 public DoublyLinkedList()
 {
     head = null;
     tail = null;
     size = 0;
 }