Iterate through the list, reversing each pointer as you go.
Track three things: prev (the node you just left), curr (the node you're at), and next (saved before you overwrite the pointer).
At each node:
Save curr.next to next (so you don't lose it)
Point curr.next to prev (reverse the arrow)
Move prev to curr
Move curr to next
When curr becomes null, prev points to what was the last node. That's your new head.