double linked list with sentinel