Singly, doubly and circular lists
Each node stores a data value and a pointer to the next node, and the list is reached through a head pointer. Insertion at the head is O(1), but searching for a value is O(n) because nodes must be visited in sequence.
A doubly linked list adds a previous pointer so the list can be traversed in both directions, while a circular list links the last node back to the first, which is useful for round-robin processing.
Given a reference to a node, linked lists support O(1) insertion and deletion and grow dynamically, but they give up O(1) random access and use extra memory for the pointers.
This unit covered the pointer based linked list family, their core operations, and the trade-offs that make them preferable to arrays when frequent insertion and deletion are required.