implemented double linked list