optimal method to find middle node in a linked list