Javatpoint Logo
Javatpoint Logo

Linked List Definition

In computer science, a linked list is a linear collection of data elements whose order is will not be given by their physical placement in memory. Instead, each element points to the one next to it. It is a data structure containing a collection of nodes representing a sequence. Each node includes data and a reference (or link) to the next node in the sequence in its most basic form. During iteration, this structure enables the efficient insertion or removal of elements from any place in the sequence. More complex variants will add more links, allowing for more efficient insertion and removal of nodes at arbitrary places. One disadvantage of linked lists is that access time is linear (which makes pipelined access difficult). It is not possible to run faster access, such as random access. When compared to linked lists, arrays have exceptional cache locality.

Linked List Definition

Linked lists are one of the most basic and widely used data structures. They can be used to build other common abstract data types, stacks, including lists, queues, associative arrays, and S-expressions. At the same time, it is not uncommon to implement those data structures directly without using a linked list as basis.

The primary advantage of a linked list over a conventional array is that the list elements can be easily inserted or removed without reallocating or reorganizing the entire structure because the data items do not need to be stored contiguously in memory or on disc, whereas restructuring an array at runtime is a much more costly operation. Linked lists allow adding and removing nodes at any place in the list with a constant number of operations by retaining the link preceding the link being added or eliminated in memory during list traversal. However, because simple linked lists do not support random data access or efficient indexing, many basic operations, such as obtaining the list's last node, locating a node that contains a given datum, or locating the place where a new node should be inserted might require iterating through most or all of the list elements.

History of Linked Lists

Allen Newell, Cliff Shaw, and Herbert A. Simon at RAND Corporation and Carnegie Mellon University created linked lists as the primary data structure for their Information Processing Language (IPL) in 1955-1956. The authors used IPL to create numerous early artificial intelligence programs such as the Logic Theory Machine, the General Problem Solver, and a computer chess program. Reports on their work were published in the IRE Transactions on Information Theory in 1956 as well as several conference proceedings from 1957 to 1959 including the Proceedings of the Western Joint Computer Conference in 1957 and 1958 and data processing (Proceedings of the First UNESCO International Conference on Information Processing) in 1959. In 1975, Newell and Simon were awarded the ACM Turing Award for "basic contributions to artificial intelligence, the psychology of human cognition and list processing." The difficulty of machine translation for natural language processing is led by Victor Yngve of the Massachusetts Institute of Technology (MIT) to use linked lists as data structures in his COMIT programming language for linguistic computer research. In 1958, a report titled "A programming language for mechanical translation" appeared in Mechanical Translation.

Linked List Definition

Hans Peter Luhn was the one who wrote an internal IBM memorandum in January 1953 suggesting using linked lists in chained hash tables, was another early adopter of linked lists. LISP, which stands for list processor, was developed by John McCarthy at MIT in 1958, and its design was published in 1960 in the Communications of the ACM in an article titled "Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I." The linked list is a crucial data structure in LISP. The value of linked lists and languages utilizing these structures as their principal data representation which was established in the early 1960s. In March 1961, Bert Green of MIT Lincoln Laboratory published a review article titled "Computer languages for symbol manipulation" in IRE Transactions on Human Factors in Electronics, summarising the benefits of the linked list technique. In April 1964, Bobrow and Raphael published "A Comparison of List-Processing Computer Languages" in Communications of the ACM. Singly linked lists were utilized as file formats in several operating systems designed by Technical Systems Consultants. A directory entry referred to a file's first sector and further sectors were found by traversing pointers. TSC used doubly linked lists similarly in a variation created for and distributed by Smoke Signal Broadcasting in California.

Types of Linked Lists

Linked lists are classified into four types

Linked List Definition

Singly Linked List

A singly linked list is stated as unidirectional linked list. As a result, it can only be traversed in one way, from the head node to the tail node.

  • Singly Linked List Structure

Singly linked lists have a wide range of uses. One typical application is to keep a list of items that must be processed in the correct sequence. For example, a singly linked list can be used to hold a list of tasks that must be done with the head node representing the first task and the tail node indicating the last task. Singly linked lists are also frequently used in algorithms that must handle a list of elements in reverse order. For example, the popular sorting algorithm quicksort stores the list of objects to be sorted in a singly linked list. Quicksort can sort the list more efficiently by processing it in reverse order.

  • Creation and Traversal of Singly Linked List

A linked list is a data structure that contains a list of components in a specific order. Each element in the list is termed as a node, and each node is linked to the next node in the list. The first node in the list is referred to as the head, while the last node in the list is referred to as the tail. We must first define a node class to build a singly linked list. Each node will have two data members such as an integer value and a reference to the next node following in the list. The next step is to develop a LinkedList class. This class will have two data members those are head node and a tail node. The first element in the list will be stored in the head node, and the last in the list will be stored in the tail node.

Linked List Definition

To add an element to the list, we must create a new node and set the preceding tail node's following reference to point to the new node. Then we may make the new node the list's new tail. To delete an element from the list, we must first locate the node that holds the value we wish to remove. This can be accomplished by traversing the list until we reach the node with the matching value. Once we have located the node, we should change the previous node's following reference to point to the next node. To discover an element in a list, we must traverse it until we find the node with the matching value. To traverse the list, we can begin at the head node and work our way down until we reach the tail node.

Doubly Linked List

A bi-directional linked list is known as a double-linked list. As a result, you can transverse it both directions. In contrast to singly linked lists, its nodes have an extra pointer called the previous pointer. This pointer refers to the previous node.

  • Doubly Linked List Structure

A doubly linked list of singly linked lists is a data structure comprising a collection of singly linked lists (SLLs) that are doubly linked. It stores data in a way that enables for quicker addition and deletion of the elements. Each SLL has two parts those include a head and a tail. Each SLL has a pointer to the first element in the list in the head and a pointer to the last element in the tail. It is easy to implement and can be utilized in various applications.

  • Creation and Traversal of Doubly Linked List

A doubly linked list is a data structure that provides for linearly storing data like a singly linked list. Unlike a single linked list, a doubly linked list allows for both forward and backward traversal of the data stored within it. This makes an appropriate data structure for applications requiring the ability to traverse a list of data forward and backward. We must first develop a Node class to hold our data to make a doubly linked list. There will be two attributes in this Node class which are data and next. The data attribute will hold the actual data we want to store in our list, and the next attribute will reference the next node. We can create our doubly linked list after we have our Node class. We must first develop a class to represent our list to accomplish this. This class has two characteristics, head and tail. The head attribute will reference the first node in our list, while the tail attribute will reference the last node in our list. We can begin adding data to the list class after it has been created.

Linked List Definition

To add data to our list, we must first create a new node and set its data attribute to the data we wish to add. Then, we must set the new node's next attribute to point to the first node in our list. Finally, we must point the head node of our list to the new node. We can now write a function to traverse our list since we know how to add data. To accomplish this, we must first build a variable that will maintain track of the current node we are exploring. To begin, we can set this variable to the head node of our list. Then we should design a while loop that will run until the current node is None, indicating that we have reached the end of our list. We need to print the data in the current node within our while loop. Then, before proceeding to the next iteration of the loop, we need to set the current node to the next node in our list.

Circular Linked List

The circular linked list is a unidirectional linked list. As a result, you can only traverse in one direction. However, the last node in this linked list points to the head node. So, while traversing, you must be cautious and stop when you reach the head node.

  • Circular Linked List Structure

A circular linked list is a form of data structure that stores data in a linear, sequential fashion using linked list technology. On the other hand, a circular linked list has no beginning or ending and is effectively a ring of nodes, unlike a typical linked list. Circularly linked lists are therefore suited for applications where data must be handled in a continuous loop such as real-time applications or simulations. A singly linked list data structure is generally used to implement circular linked lists. This indicates that each node in the list has a pointer with connection to the next node. The ring-like structure is then formed by connecting the last node in the list to the first node. Data access in a circular linked list is similar to data access in a traditional linked list. However, because the list has no clear beginning or ending, it is difficult to know where to begin traversing it. As a result, many circular linked list implementations utilize a "head" pointer that links to the first node in the list.

Linked List Definition

There are several advantages of using circular linked lists over traditional linked lists. First, data can be added and removed anytime because the list has no fixed beginning or ending. Therefore, Circular linked lists are perfect for applications where data must be regularly added or removed as in a real-time application. Second, data can be accessed in a continuous loop since it is kept in a ring-like structure. Circularly linked lists are suited for applications where data must be handled in a continuous loop such as a real-time application or simulation. Third, circular linked lists are often more memory efficient because there is no fixed beginning or end to the list. This is because traditional linked lists frequently require additional memory for pointers pointing to the beginning and end of the list. On the other hand, Circular linked lists need one pointer in memory i.e., the head pointer. Finally, circular linked lists are frequently more simple and easier to implement than traditional ones. This is because traditionally linked lists frequently require different data structures such as stacks and queues to maintain track of the list's beginning and ending. In contrast, circular linked lists only require a singly linked list data structure.

  • Creation and Traversal of Circular Linked List

A circular linked list is a data structure that can hold a list of things. It has a connection to both the singly and doubly linked lists. In contrast to a singly linked list which contains a NULL pointer at the end, a circular linked list has a pointer that points back to the list's first node. This allows you to traverse the complete list without keeping track of the list's end. Circularly linked lists are classified into singly linked and doubly linked. Each node in a singly linked circular linked list holds a pointer to the next node. The list's final node implies to the first node. Each node in a doubly linked circular linked list pointers the next and previous node. Circularly linked lists have a wide range of uses. They can be used to create queues, stacks, and dequeues. They are also suitable for applications requiring circular buffers or circular arrays.

A circular linked list can be made in two ways:

  • Make a singly linked list with the last node pointing to the first node.
  • Make a doubly linked list, with the last node pointing to the first and the first node pointing to the last.

To make a singularly linked circular linked list, first we should create a singly linked list. We can accomplish this by developing a Node and a LinkedList class. The Node class will represent each node in the list, and the LinkedList class will represent the list itself.

Linked List Definition

To make a doubly linked circular linked list, first we need to create a doubly linked list. We can do this by creating a Node and a LinkedList class. The Node class will represent each node in the list, and the LinkedList class will represent the list itself. We can make a circular linked list by generating a few nodes and linking them together after we have created our Node and LinkedList classes. To begin, we must first create a few nodes. The nodes must then be linked together to form the circular linked list. We can alternatively use a doubly linked list to connect the nodes.

A circular linked list can be traversed in two ways:

  • Return to the head node by traversing the list.
  • Keep a record of the nodes you have visited.

While a loop can traverse the list until you reach the head node again, you can use a list or set to keep track of the nodes you have visited.

Circular Doubly Linked List

A circular doubly linked list is a mixture of a doubly and a circular linked list. Like the doubly linked list, it has an extra pointer called the previous pointer and its last node like the circular linked list points at the head node. This type of linked list is a bi-directional list. As a result, you can traverse in both directions

  • Doubly Circular Linked List Structure

A doubly circular linked list (DCL) is like a type of doubly linked list. The first and last nodes in a DCL are linked together to form a circle. This enables rapid and easy traversal of the entire list without requiring specific case handling at the beginning or end of the list.

Linked List Definition

DCLs are frequently used in applications where data must be handled sequential fashion, such as in a video or audio player. The list's circular structure enables quick and easy passage from one node to the next without additional case handling. DCLs are also utilized in applications where data must be accessed at random like database. In this situation, the list's circular nature enables quick and easy travel to any node without specific case handling.

  • Creation and Traversal of Doubly Circular Linked List

To construct a doubly circular linked list, we must first create a node structure that will house our data and pointers. Then we can create a head pointer and initialize it to null. Next, we need to create the function to add new nodes to the list. This function should accept the data to be inserted and the head pointer as input. It should then create a new node with this data and insert with the list. Finally, we should write a function that will traverse the list and output the data contained in each node. This function should take the head pointer as input. It should then loop through the list by outputting the data contained in each node.

Applications of Different Types of Linked Lists

  • Stacks and queues are implemented using linked lists.
  • Sparse matrices are represented as a linked list.
  • A circular linked list can be used to implement an image viewer.
  • The linked list idea can be used to navigate through websites.
  • A Fibonacci heap can be implemented using a circular doubly linked list.

Advantages Of Linked List

  • Dynamic Data Structure

A linked list is a dynamic data structure because it can grow and shrink at the runtime by allocating and deallocating memory. As a result, there is no need to indicate the linked list's initial size.

  • No Memory Wastage

There is no memory wastage in the linked list because the size of the linked list increases or decreases at run time. Therefore, there is no memory wastage and no need to pre-allocate the memory.

  • Implementation

Linear data structures such as stacks and queues are frequently implemented using a linked list.

  • Insertion and Deletion Operations

Insertion and deletion actions are simpler in the linked list. There is no need to shift elements after the insertion or deletion of an element, only the address in the next pointer should be updated.

  • Flexible

Unlike array elements, linked List elements are not stored in contiguous memory locations.

  • Efficient for Extensive Data

When working with enormous datasets, linked lists play a significant role since they can grow and shrink dynamically.

  • Scalability

It contains the capacity to add or remove element from any position.

Disadvantages of Linked List

  • Memory Requirements

A linked list needs more memory than an array. Because a pointer is necessary for a linked list to store the address of the next entry so it requires additional memory.

  • Traversal

In a Linked list, traversal is more time-consuming than in an array. Unlike an array, a linked list does not allow direct access to an element by index. For example, to visit a node at position n, one should traverse all the preceding nodes.

  • Reverse Traversing

Reverse traversing is not possible in a singly linked list but in a doubly linked list since each node has a pointer to the previously connected nodes. For performing this, more memory is necessary for the back pointer consequently where memory is wasted.

  • Random Access

Random access is impossible because of the dynamic memory allocation in a linked list.

  • Lower Efficiency at Times

Certain activities, such as searching for an element or iterating across the list, can be slower in a linked list.

  • Complex Implementation

The linked list implementation is more sophisticated than the array approach. It necessitates a thorough understanding of programming.

  • Difficult to Share Data

It is not easy to communicate data since accessing the memory address of a linked list entry directly is not feasible.

  • Not appropriate For Small Datasets

It cannot provide any substantial improvements on small datasets when compared to arrays.

Conclusion

A linked list is commonly used to collect object sequences that require efficient insertion and removal of entries from the middle of the sequence. Linked lists are built by constructing a set of nodes that contain the values or references to the information that needs to be saved. Finally, linked lists provide a dynamic and efficient way to handle collections of data elements with flexibility by serving as a foundation for other data structures and algorithms.


Next TopicMotor Definition





Youtube For Videos Join Our Youtube Channel: Join Now

Feedback


Help Others, Please Share

facebook twitter pinterest

Learn Latest Tutorials


Preparation


Trending Technologies


B.Tech / MCA