I feel like I am missing something painfully simple but I am trying to understand mark and sweep garbage collection per Andrew Appel's Modern Compiler Implementation in ML book and there's a small paragraph inside the Mark and Sweep section titled Pointer Reversal (270).

At this point I think I understand how it works. In a nutshell, as you traverse the graph you flip all the pointers so that your predecessor is inside your set of fields. Then when you are done with a given element, you flip the pointers back so they point at the right place again.

If that is correct, what exactly does it buy you? Appel attempts to explain this but I don't fully grok his wording.

Edit
Report