Linked lists are linear data structures where each node points to the next. Each node contains a data field and a pointer to the next node. There are three types: singly, doubly, and circular linked lists. Linked lists allow for constant-time insertions and deletions and do not require fixed size allocation. Common operations on linked lists include insertion, deletion, searching, and traversal. Linked lists are useful for implementations like stacks, queues, and dynamic data structures.
What is LinkedList
A linked list is a linear collection of data elements, called nodes, each
pointing to the next node by means of a pointer. It is a data
structure consisting of a group of nodes which together represent
a sequence. Linked lists were developed in 1955–1956 by Allen
Newell, Cliff Shaw and Herbert A. Simon.
It contains data field & Address field or Link field.
Why do weuse Linked List?
Linked lists are preferable over arrays when:
a) we need constant-time insertions/deletions from the list (such as in
real-time computing where time predictability is absolutely critical )
b) We don't know how many items will be in the list. With arrays, you
may need to re-declare and copy memory if the array grows too big
c) We don't need random access to any elements
d) We want to be able to insert items in the middle of the list (such as
a priority queue)
5.
Types of LinkedList
There are three types of linked list as given below:
1. Singly Linked List
2. Doubly Linked List
3. Circular Linked List
Doubly Linked List
Indoubly linked list each node is divided into three parts:
1. The first part is PREV part.
2. The second part is the INFO part.
3. The third part is NEXT part.
Singly Linked ListOperations
There are several operations in singly linked list:
1.Creation
2. Insertion
3. Deletion
4. Searching
5. Display
11.
Nodes
• Nodes arethe units which makes up linked list.
• In singly linked list, nodes are actually structures made up of data and a
pointer to another node.
• Usually we denote the pointer as “*next”
12.
*Nodes structure
struct node
{
intdata; //This is where we will store data
struct node *next; //This is the link part
}*head=NULL;
/*Initially we assign “NULL” to the head for later operational purpose*/
Creation
• Creation operationis used to create a linked list.
• Generally, we use dynamic memory allocation to create our desired
number of nodes for linked list in program run time.
15.
void create()
{
struct node*newnode, *current;
newnode = (struct node*)malloc(sizeof(struct node));
newnode->next = NULL;
if(head == NULL)
{
head = newnode;
current = newnode;
}
else
{
current->next = newnode;
current = newnode;
}
}
//Creating linked list in ‘C’
Insertion
• Insertion operationis used to insert a new node in the linked list.
• Insertion is of three types. They are:
Inserting at first
Inserting at last
Inserting at mid
18.
Insertion at first
•There are two steps to be followed to insert a node at first position.
They are:
Make the next pointer of the node point towards
the first node of the list.
Make the head pointer point towards this new node.
19.
*Visual Representation ofInsertion at First
data next
Head
data next data next
NULL
Newnode
nextdata
20.
void first_insert()
{
struct node*newnode, *current;
newnode = (struct node*)malloc(sizeof(struct node));
newnode->next = NULL;
if(head == NULL)
{
head = newnode;
current = newnode;
}
else
{
newnode->next = head;
head = newnode;
}
}
//Inserting at first
21.
Insertion at last
•Inserting at the last position is a simple process.
To insert at last we just simply need to make the next pointer of last
node to the new node.
22.
*Visual Representation ofInsertion at Last
data next
Head
data next data next
NULLdata next
Newnode
Current/
Last
23.
void last_insert()
{
struct node*newnode, *current;
newnode = (struct node*)malloc(sizeof(struct node));
newnode->next = NULL;
if(head == NULL)
{
head = newnode;
current = newnode;
}
else
{
current->next = newnode;
current = newnode;
}
}
//Inserting at last
24.
Insertion at mid
•There are several steps to be followed to insert a node at mid position.
They are:
Find the position after which and before which node the new node
is going to be inserted.
Assign their locations to two different pointers named ‘temp’,
‘temp2’
respectively.
Make the next pointer of ‘temp’ to point newnode, and the next
pointer of newnode to ‘temp2’.
25.
*Visual Representation ofInsertion at Last
data next
Head
data next data next NULL
data next
Newnode
temp temp2
Deletion
• Deleting isa simple process.
At first we need to find the previous and the next node
of that particular node.
Then we need to point the next pointer of the previous node to
the next node of the particular node we want to delete.
Searching
• To searchin a linked list we need to follow the steps given below:
We need a pointer which is assigned with the address of head
pointer.
Then we start a loop until the last node of the linked list to search.
Display
• To displaythelinked list we need to follow the steps given below:
We need a pointer which is assigned with the address of head
pointer.
Then we start a loop until the last node of the linked list to display
the
the list.
Uses of LinkedList
1. Web-browsers
A good example I see is web-browsers, where it creates a
linked list of web-pages visited, so that when you check
history (traversal of a list) or press back button, the previous
node's data is fetched.
2. Stacks and queues
It is used to develop stacks and queues which have lots of
applications.
4. Phonebook
In phonebookthe names are
sorting in ascending order. If we
want to add a new contact then
the memory for the new
contact is created by linked
list.
37.
Advantages
• Linked listsare a dynamic data structure, allocating the needed
memory while the program is running.
• Insertion and deletion node operations are easily implemented
in a linked list.
• Linear data structures such as stacks and queues are easily
executed with a linked list.
• They can reduce access time and may expand in real time
without memory overhead.
38.
Disadvantages
• They havea quite difficult to use more memory due to pointers
requiring extra storage space.
• Nodes in a linked list must be read in order from the beginning
as linked lists are inherently sequential access.
• Nodes are stored in continuously, greatly increasing the time
required to access individual elements within the list.
• Difficulties arise in linked lists when it comes to reverse traversing.
For instance, singly linked lists are cumbersome to navigate
backwards and while doubly linked lists are somewhat easier to
read, memory is wasted in allocating space for a back pointer.