@Override
	public void remove(int index) {
		if (index < 0) { // If the index too small
			throw new ListIndexOutOfBoundsException("Index less than 0"); // Throw a ListIndexOutOfBoundsException that indicates this
		}

		if (index == this.indexOfCurrent()) { // If the index is that of the current node, which can't be removed:
			throw new IllegalArgumentException("Can't remove current element"); // Throw an IllegalArgumentException to inform the user and exit the method
		}

		if (index == 0) { // If the element to be removed is at index 0
			this.head = this.head.next; // Move the head node forward one node
			this.head.previous = null; // Set the previous attribute of the head node to null so that all references to the node which was removed are gone, making it eligible for garbage collection
			return; // Leave the method
		}

		Node prevNode = this.head; // prevNode is the node before the one to be removed
		for (int i = 1; i < index && prevNode != null; i ++, prevNode = prevNode.next); // Move prevNode forward until it is either pointing at the node before the one to be removed or reaches the end of the list

		if (prevNode != null) { // If the for loop was not exited by reaching the end of the list:
			if (prevNode.next == this.tail) { // Check if the node to be removed is the last node because that is a special case
				prevNode.next = prevNode.next.next; // Move the next reference of prevNode to the one after the node to be removed
				prevNode.next.previous = prevNode; // Set the previous attribute of the node after the one to be removed to prevNode, making all references to the node to be removed null (effectively removing it from the list, if not from memory) and making it eligible for garbage collection
			}

			else { // If the node to be removed is the last one:
				prevNode.next = null; // Remove the next attribute of prevNode because it is now at the end of the list
				this.tail = prevNode; // Update the tail attribute so that it contains a reference to the new end of the list
			}
		}

		else { // If the for loop was exited because it reached the end of the list:
			throw new ListIndexOutOfBoundsException("Index too large"); // Throw a ListIndexOutOfBoundsException that informs the user of that fact
		}
	}