I would never tell you that you are wrong to have cyclic data structures. But there are reasonable workarounds like using handles into an array to do it, which of course re-creates some of the same problems as pointers, but not the worst ones, and is often a positive for performance on modern hardware due to improved data locality.
Or you can use reference counted types and take a small performance hit.
Or you can use reference counted types and take a small performance hit.
Or use unsafe and git gud.