Don't know if any GCs use it, but if modifying the pointers is not possible then one alternative is Floyd's cycle-finding algorithm[1] which uses constant storage (two pointers).
[1]: https://en.wikipedia.org/wiki/Cycle_detection#Floyd.27s_Tort...
[1]: https://en.wikipedia.org/wiki/Cycle_detection#Floyd.27s_Tort...
Still, fun algorithm.