Linked lists are a data structure that arranges data non-contiguously in memory. Each node of a linked list contains a data field as well as a pointer to the next node. This allows linked lists to dynamically grow and shrink in size as needed. Single linked lists contain a single pointer in each node pointing to the next node, while double linked lists contain pointers both to the next and previous nodes, allowing traversal in both directions. Common operations on linked lists include traversing, inserting, deleting, searching, and sorting nodes.