A linked list is a linear data structure where each element is linked to the next element via a pointer. Each element, called a node, contains data and a pointer to the next node. The first node is referenced by a pointer called the head. Linked lists allow for efficient insertion and removal of nodes throughout the list since nodes are not confined to adjacent memory locations. Linked lists can grow and shrink dynamically as nodes are added or removed.