You could consider turning "current" into an iterator instead of a pointer:
struct SHUTTLE_DATA
{
std::list< STOP_DATA* >::iterator current; // or whatever your "stop" class is called
};
Initialize to first stop:
shuttle->current = shuttle->stops.begin();
Next stop:
shuttle->current++;
Find out if you're at the end of the list:
if( shuttle->current == shuttle->stops.end() )
In the last example you're actually one element past the last one, rather than at it, as per normal iterator behaviour.
As for your last question could you rewrite it? I don't understand what you're asking. Perhaps a word is missing?