Don't be so hard on yourself. Go ahead and get it wrong the first time. Make it work, make it right, make it fast.
Getting it wrong the first time is a great way to avoid getting stuck. You just type the first thing that comes to mind. The important thing is that you're typing.
We cannot emphasize strongly enough that "first-cut" code is not finished. It's good enough to sort out our ideas and make sure we have everything in place, but it's unlikely to express its intentions cleanly.
This implementation may seem gratuitously naive—after all, we should be able to design a structure as simple as this, but we've often found it worth writing a small amount of ugly code and seeing how it falls out. It helps us test our ideas before we've gone too far, and sometimes the results can be surprising. The important point is to make sure we don't leave it ugly.