Efficient insertion of elements anywhere in the container constant time).
is missing a (
Also,
However, this doesn't show a list being useful in anyway. I'll leave it up to your imagination how people have done miracles with things just like this.
I think you should either throw this part away or give some specific examples (whatever they could be). As it is, it serves no purpose.
bool Iterator::operator ! () behaves unlike a pointer. I think you should just write a List::end() method and have it != list.end() in your loops.
Design
I don't think this should be at the end. Talking about the design of a list is sort of the main point of the article while now it seems to concentrate on example code. I think you should move the paragraphs around, so that, for example, you explain why you have pointers to both first and last node before showing code which has them.
For instance, if you were to iterate through the linked list, how would you know where the end and beginning were? etc? etc?
The intended audience doesn't know much about lists, so why would you ask them that? I suppose it doesn't sound professional.. Maybe it would better to say that applications of circular lists aren't common or something of the sort. It would be best to actually do some research and explain why they would be needed though.
FAQ
I don't think articles should have FAQs. The question you answered could be smoothly incorporated into the main article.
Also in your methods you check if there was a first cell. Instead of that you could maintain a head cell that it is not dynamic allocated. That will be empty as it will not hold data.
hamsterman, noted and edit! I moved the design section before implementation, removed *a lot* of junk, and changed the iterators to become more similar to std iterators (such as the use of list.end() and even added a operator+, operator==, and operator!= overload).
ne555, that's true... never really thought about that. I have a bit to go on the Article anyways. For instance, I don't mention XOR linking, the information on techniques is rather limited, and I only have a handful of examples. I'll be sure and add that :P EDIT: I still think it's cool that that the entire list is one pointer in size, one pointer size per node, and one pointer size per iterator. :P
L B, I forgot to take it off when I realized that two would show up :O
The article isn't finished yet ;). It's rather hard for me to explain everything I know about something in words. I appreciate the help. I'll be looking into common ways of implementing std::list and other ways list can be used.