Rust would have tradeoffs here, though. For example, in C# you'd be able to do (non-leaking) graphs and other structures in 100% safe code, while Rust would need unsafe.
You need to use reference counting or a scoped memory pool. It's totally fine in almost all cases.
Refcounting in Rust is still faster than refcounting in ObjC or Swift (because Rust can avoid using atomics or increasing counts in many cases), but people who use Rust tend to insist on zero overhead, and a truly flexible zero-overhead solution can't be verified statically.
You don't even need "not the most optimum implementation" (assuming you're talking about index-based graphs or something).
You can make non-leaking pointer-based graphs in safe Rust using reference counting (basically what C# does, if you squint) or arenas (if your nodes' lifetimes fit that pattern).
Rust is perfectly capable of expressing graphs with zero unsafe code, just currently not in the most optimum implementation.