use singly linked list for task queue