Linked lists are composed of nodes, where each node contains a data element and a reference (pointer) to the next node in the sequence.
Unlike arrays, linked lists do not store elements in contiguous memory locations. Instead, each node can be located anywhere in memory, and they are connected via pointers. Therefore, linked lists offer a dynamic memory allocation (nodes can be allocated and deallocated dynamically), efficient insertion and deletion operations (when you have a reference to the node), and flexibility in size. However, they have drawbacks such as slower access times for arbitrary elements (you have to traverse the list from the beginning) and higher memory overhead due to the storage of pointers.