an implementation of double linked list