Linked lists are a linear data structure where each element, called a node, contains a data field as well as a pointer to the next node. Each node is dynamically allocated and linked to the next, allowing flexible insertion and removal of elements anywhere in the list. Common operations on linked lists include adding nodes to the front or end, removing nodes, and searching the list for a given value using the node pointers. Linked lists are useful when the number of elements is not known in advance.