public int Get(int idx) // вернёт значение элемента списка с указанным индексом { DoublyNode current = head; int count = 0; while (count != idx) { current = current.next; count++; } return(current.value); }
public void RemoveLast() // удаление последнего элемента { if (head == null) { return; } tail.previous.next = tail.next; tail = tail.previous; size--; }
public void Set(int idx, int val) // поменять значение элемента с указанным индексом { DoublyNode current = head; int count = 0; while (count != idx) { current = current.next; count++; } current.value = val; }
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); }
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); }
public bool Contains(int val) // проверка, есть ли элемент в списке { DoublyNode current = head; while (current != null) { if (current.value == val) { return(true); } current = current.next; } return(false); }
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++; }
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++; }
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; } }
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++; }
public DoublyLinkedList() { head = null; tail = null; size = 0; }