A singly linked list can be used to implement the Queue ADT efficiently as long as it has a
tail pointer (as well as the
head pointer). The
tail pointer is a reference variable pointing to the other end (opposite of
head) of the queue.
Exercise Think about how to implement a queue using a singly linked list such that the core operations are constant time.
The front of the queue would be the HEAD node of the singly linked list. The back of the queue would be the TAIL node of the singly linked list. Every time we want to
enqueue an additional value to the queue, we would create a new node and set it as the new TAIL node. Then when we want to
dequeue a value from the front of the queue, we set the HEAD to the current HEAD node’s
.next. As such, the HEAD node will always be at the front of the queue, and calling
front would return the value of the HEAD node.
|prepend the list and update the ||$O(1)$|
|delete from front: ||$O(1)$|
|check if ||$O(1)$|