Linked lists are a data structure that store elements non-contiguously in memory. Each element, called a node, contains data and a pointer to the next node. There are several types of linked lists including singly linked lists where each node has a next pointer, doubly linked lists where each node has next and previous pointers, and circular linked lists where the last node points to the first. Common operations on linked lists include traversing, inserting nodes, deleting nodes, and searching for elements. Insertion and deletion have lower time complexity than arrays since they only require updating pointers rather than shifting elements.