use a singly linked list