public boolean insert(int index, E newItem) {
		if (index < 0 || index > size)
			return false;
		
		Node newNode = new Node(newItem);
		size++;
		
		if (index == 0) { // insert node at head
			newNode.next = head;
			head = newNode;
			if (end == null) // if only item
				end = newNode;
			return true;
		}
		
		if (index == size) { // insert node at tail
			end.next = newNode;
			end = newNode;
			return true;
		}
		
		Node cursor = head;
		int counter = 0;
		while (counter < index - 1) { // shuttle the cursor to the node before the index to be inserted
			cursor = cursor.next;
			counter++;
		}
		newNode.next = cursor.next;
		cursor.next = newNode;
		return true;
	}