singly linked list with append