**Linked List Concepts**

A linked list is a non-sequential collection of data items. It is a dynamic data structure. For every data item in a linked list, there is an associated pointer that would give the memory location of the next data item in the linked list.

The data items in the linked list are not in consecutive memory locations. They may be anywhere, but the accessing of these data items is easier as each data item contains the address of the next data item.

**Advantages of linked lists:**

Linked lists have many advantages. Some of the very important advantages are:

- Linked lists are dynamic data structures. i.e., they can grow or shrink during the execution of a program.
- Linked lists have efficient memory utilization. Here, memory is not preallocated. Memory is allocated whenever it is required and it is de-allocated (removed) when it is no longer needed.
- Insertion and Deletions are easier and efficient. Linked lists provide flexibility in inserting a data item at a specified position and deletion of the data item from the given position.
- Many complex applications can be easily carried out with linked lists.

**Disadvantages of linked lists:**

- It consumes more space because every node requires a additional pointer to store address of the next node.
- Searching a particular element in list is difficult and also time consuming.

**Types of Linked Lists:**

Basically we can put linked lists into the following four items:

- Single Linked List.
- Double Linked List.
- Circular Linked List.
- Circular Double Linked List.

A **single linked list** is one in which all nodes are linked together in some sequential manner. Hence, it is also called as linear linked list.

A **double linked list** is one in which all nodes are linked together by multiple links which helps in accessing both the successor node (next node) and predecessor node (previous node) from any arbitrary node within the list. Therefore each node in a double linked list has two link fields (pointers) to point to the left node (previous) and the right node (next). This helps to traverse in forward direction and backward direction.

A **circular linked list** is one, which has no beginning and no end. A single linked list can be made a circular linked list by simply storing address of the very first node in the link field of the last node.

A **circular double linked list** is one, which has both the successor pointer and predecessor pointer in the circular manner.

**Comparison between array and linked list:**

**Trade offs between linked lists and arrays:**

**Applications of linked list:**

- Linked lists are used to represent and manipulate polynomial. Polynomials are expression containing terms with non zero coefficient and exponents. For example:
*P(x) = a0 Xn + a1 Xn-1 + …… + an-1 X + an*- Represent very large numbers and operations of the large number such as addition, multiplication and division.
- Linked lists are to implement stack, queue, trees and graphs.
- Implement the symbol table in compiler construction