Не относится к вашему вопросу, и я знаю, что это не раздел обзора кода, но вот некоторые из моих мыслей.
В вашей функции вставки
DoublyListNode < T > *newPtr = new DoublyListNode< T >(tempData);
newPtr->nextPtr = newPtr->prePtr = NULL;
if(newPtr == NULL)
{
cout << "Insert cannot allocate memory\n";
} //end if
должно быть
DoublyListNode < T > *newPtr = new DoublyListNode< T >(tempData);
if(newPtr == NULL)
{
cout << "Insert cannot allocate memory\n";
}else{
newPtr->nextPtr = newPtr->prePtr = NULL;
// rest of code
Кроме того, в вашей функции поиска
DoublyListNode< T > *currentPtr = head;
for(int i = 1; i < index; i++)
{
currentPtr = currentPtr->nextPtr;
} // end for
должно быть
DoublyListNode< T > *currentPtr = head;
for(int i = 1; currentPtr && (i < index); i++)
{
currentPtr = currentPtr->nextPtr;
} // end for
Кроме того, поскольку вы используете C ++, рассмотрите возможность сделать ваши индексы на основе 0 (глядя на твой код они на базе атм 1)