How to find middle element of doubly linked list using head and tail?
Start with a pointer $x$ at the beginning and a pointer $y$ at the end. Repeatedly execute the following steps:


If $x=y$, stop.
Advance $x$ forward.
If $x=y$, stop.
Advance $y$ backward.


This should work out for both even and odd length.