BAH!<p>4. The &quot;intrusive&quot; containers, but of course.<p>The one true way to do it in C.<p>For one, you can keep items in multiple containers, all being on equal footing. None of that typical C++ mess, when <i>this list</i> is a primary storage for items, and <i>those maps</i> are secondary indexes, all sprinkled evenly with iterators. Intrusive containers don&#x27;t <i>own</i> items, they merely <i>organize</i> them, which is exactly the right way to go about it.<p>For two, the actual code for container operations is as abstract and on-point as it gets as it focuses solely on &quot;weaving&quot; items into and out of a container rather than on other things, like de&#x2F;allocating supporting structures.<p>For three, you get no heap activity when adding&#x2F;removing items to&#x2F;from a container. This means that if you already have the items, you can always arrange them into a collection. This also eliminates a lot of error handling code, leading to a simpler code.<p>Obviously, this is not limited to just linked lists.<p>[1] <a href="http:&#x2F;&#x2F;www.makelinux.net&#x2F;ldd3&#x2F;chp-11-sect-5" rel="nofollow">http:&#x2F;&#x2F;www.makelinux.net&#x2F;ldd3&#x2F;chp-11-sect-5</a> (