My advice is to pick up a good Data Structures book.
I do not use lists a lot, you should read about vectors.
Vectors are often better than lists and if there are lots of elements and insertion//deletion operations are needed, tree-like structures are much better...
Speed-wise good lists, good in some concrete problems are something like this, adapted to the problem in concrete:
.-Double linked. You store the next AND the previous node.
.-Circular. Next node to the "tail"(last) is the "head" (first).
.-"Chained". Don´t know how to call this

. At each X nodes store an additional pointer to Y forward nodes. The same for previous nodes. This is for speeding-up the iteration, jumping parts of the list. For example, at each 10 nodes you insert a special node with two extra pointers, one pointing to 30 nodes forward and the other one to 30 nodes backwards. But this is going forward to a tree...
One advice: When you feel confortable enough with data structures, start using STL. It is better code than you and me could implement. It is standard. It is something every program needs and is not needed to be reimplemented every time...
What the hells!