Need to be able to: insert at front and back. delete from front. A doubly linked list would take O(1) time for both insert and delete. Slightly more efficient: a circular linked list with a pointer to the last node. Could also use two singly linked lists, but delete would only be amortized O(1). See haskell code.