reverse list version 2, return a pointer