Save the "next" pointer, save the "this" pointer as "previous", set the next pointer to NULL, follow the saved next pointer to the next item, then repeatedly save the next pointer, set next pointer to the saved "previous" pointer, until the next pointer is NULL (at which point we've reached the end of the list). We now have a list where all the next pointers are pointing to the previous element and the first next pointer is pointing to NULL; i.e. we've reversed the order of the list in one pass, with no need for extra data structures.