public T delete(int index) {
		
		if (index < 0 || index >= this.size) throw new IndexOutOfBoundsException();
		
		//	handle a single element linked list
		if (this.size == 1) {
			
			MyNode nodeToDelete = this.head;
			this.head = null;
			this.tail = null;
			this.size--;
			return nodeToDelete.data;
	
		}
		//	handle delete head
		else if (index == 0) {
			
			MyNode nodeToDelete = this.head;
			this.head = this.head.next;
			this.size--;
			return nodeToDelete.data;
			
		}
		//	handle delete tail
		else if (index == this.size -1) {
			
			MyNode nodeToDelete = this.tail;
			this.tail = this.tail.prev;
			this.tail.next = null;
			this.size--;
			return nodeToDelete.data;
			
		}
		//	handle delete arbitrary index that is neither head nor tail
		else {
			
			MyNode nodeToDelete = this.head;
			
			for (int i = 0; i < index; i++) nodeToDelete = nodeToDelete.next;
			
			//	move the pointers
			nodeToDelete.prev.next = nodeToDelete.next;
			nodeToDelete.prev = null;
			this.size--;
			
			return nodeToDelete.data;
			
		}
		
	}