General Considerations

Time efficiency: operations should be constant time (except MAP, DELETE, DESTROY).

Space efficiency: no limit on list size (dynamic allocation). Pointers consume memory: keep overhead down.

Should we use a header?

Headers make it possible to implement certain operations in constant time: But: header must be kept up-to-date.