# How to find middle element of doubly linked list using head and tail?

Is there a way possible to find the middle element of a doubly linked list using head and tail. I tried traversing to the next element from the starting node and the previous element from the end node and check if the reference of both is same or not. This works fine if there are odd number of elements in the list. I am not able to find when should I stop in case the number of elements in the list is even.

while(head.next != end.previous) {
end = end.previous;
}

• What does it mean to find the middle element "in $n/2$"? What are you counting here? – Yuval Filmus Apr 17 '18 at 8:44
• I meant n/2 iterations. – Karan Khanna Apr 17 '18 at 8:45
• What does "iteration" constitute? Otherwise it's hard to argue one way or another. – Yuval Filmus Apr 17 '18 at 8:46

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.