Вам всегда понадобятся две переменные:
Foo *head = getSomeList();
Foo *tail = head;
while (tail->isValid())
++tail;
// You have head and tail here
Вы не можете реализовать это по-другому, потому что tail[0] != head
(если список не пуст).
Показ кода и сообщение о том, чего именно вы пытаетесь достичь, может привести к лучшим ответам.