DoublyLinkedList < T > ::DoublyLinkedList() {
head = new Node < T > (T()); // create dummy nodes
tail = new Node < T > (T());
head->next = tail; // have them point to each other
tail->prev = head;
}
Your list has dummy nodes at the head and tail. You need to account for these when reversing the list.
Your reverseList() function doesn't actually reverse the list, it just prints it in reverse order. I suspect that you're supposed to actually reverse the list.
to truly reverse it you need to iterate the whole list to swap head, tail, and each node's prev/next. alternately you can put a boolean 'reversed' in place and use that in various places to swap the direction in-place. The flag is faster (its just one boolean toggle) but some routines (not all) will have extra clutter to decide which direction to go (mostly, the print for user routine(s) need this, everything else is pretty much ok to treat it from original direction ignoring the flag?). You would need to flip anything else that is exposed to the user, like if you had a gethead / gettail those need to be aware of reverse flag too. Append of course.