A linked list stores elements in nodes scattered across memory, each node holding a value and a next pointer to the following node. The head marks the first node; the last node's next is null. Inserting at the head or deleting the head is O(1), but finding or inserting at an arbitrary position requires a traversal from the head, O(n) — the opposite trade-off from an array.
Singly linked list with head and next pointersinsertHead(v) → new.next := head; head := new O(1)
insertEnd(v) → walk to last; last.next := new O(n)
search(v) → walk from head until found / null O(n)
deleteHead() → head := head.next O(1)
No wasted shifting; extra pointer memory per node.