A data structure used in programming to allow dynamic length lists allowing quick iteration, addition and subtraction from the list. Random access is not quick, however, requiring a search of the list. There are a few variants of LinkedLists: singly-linked lists, doubly-linked lists and circular lists (which can be either singly or doubly linked).

A simple singly linked list in C++

template<class T> struct !LinkedListNode? {

T data;

LinkedListNode? *next;


LinkedLists work by each node merely pointing to the next node in the list, where the last node has a NullPointer. Doubly-linked lists have a previous pointer as well, allowing bi-directional iteration. A circular list has the last node pointing back to the first node. Adding and deleting nodes aren't terribly complex but require a little thinking; you need to store temporary pointers and do a little magic.

Most higher level languages have linked list constructs. For example C++ has the STL, Java has a LinkedList in its class libraries. Category:FunctionalProgrammingLanguages almost always have linked lists as built-in datatypes, the linked list is the primary datatype in LISP. If you are coding C, however, you might have to write your own.

Note: Python has a "list" datatype, but it is implemented as an array of pointers, so don't treat it like a linked list -- prepending elements to the head of a Python list one by one is not an efficent thing to do.