SlideShare a Scribd company logo
Memory Representation of a doubly linked list
Memory Representation of a doubly linked list is shown in the following image.
Generally, doubly linked list consumes more space for every node and therefore, causes
more expansive basic operations such as insertion and deletion. However, we can easily
manipulate the elements of the list since the list maintains pointers in both the
directions (forward and backward).
In the following image, the first element of the list that is i.e. 13 stored at address 1.
The head pointer points to the starting address 1. Since this is the first element being
added to the list therefore the prev of the list contains null. The next node of the list
resides at address 4 therefore the first node contains 4 in its next pointer.
We can traverse the list in this way until we find any node containing null or -1 in its
next part.
Operations on doubly linked list
Node Creation
struct node
{
struct node *prev;
int data;
struct node *next;
};
struct node *head;
Node Creation
oid insertion_beginning()
{
struct node *ptr;
int item;
ptr = (struct node *)malloc(sizeof(struct node));
if(ptr == NULL)
{
printf("nOVERFLOW");
}
else
{
printf("nEnter Item value");
scanf("%d",&item);
if(head==NULL)
{
ptr->next = NULL;
ptr->prev=NULL;
ptr->data=item;
head=ptr;
}
else
{
ptr->data=item;
ptr->prev=NULL;
ptr->next = head;
head->prev=ptr;
head=ptr;
}
printf("nNode insertedn");
}
}
void deletion_beginning()
{
struct node *ptr;
if(head == NULL)
{
printf("n UNDERFLOW");
}
else if(head->next == NULL)
{
head = NULL;
free(head);
printf("nnode deletedn");
}
else
{
ptr = head;
head = head -> next;
head -> prev = NULL;
free(ptr);
printf("nnode deletedn");
}
}
Operations on doubly linked list
void search()
{
struct node *ptr;
int item,i=0,flag;
ptr = head;
if(ptr == NULL)
{
printf("nEmpty Listn");
}
else
{
printf("
nEnter item which you want to search?
n");
scanf("%d",&item);
while (ptr!=NULL)
{
if(ptr->data == item)
{
printf("
nitem found at location %d ",i+1);
flag=0;
break;
}
else
{
flag=1;
}
i++;
ptr = ptr -> next;
}
if(flag==1)
{
printf("nItem not foundn");
}
}
}
Circular Linked List
• Circular linked list is a linked list
where all nodes are connected to
form a circle.
• There is no NULL at the end.
• A circular linked list can be a singly
circular linked list or doubly
circular linked list.
Advantages of Circular Linked Lists
• Any node can be a starting point.
We can traverse the whole list by
starting from any point. We just
need to stop when the first visited
node is visited again.
• Useful for implementation of
queue.
• For example, when multiple
applications are running on a PC
OPERATIONS ON CIRCULARLY
LINKED LIST
• Insertion
• Deletion
• Display
Circular linked list – Creation
temp=head;
temp->next = new;
new -> next = head;
Insertion in a Circular Linked List
1. Inserting At Beginning of the list
2. Inserting At End of the list
3. Inserting At Specific location in the list
Inserting At Beginning of the list
Steps to insert a new node at beginning of the
circular linked list...
Step 1 - Create a newNode with given value.
Step 2 - Check whether list is Empty (head == NULL)
Step 3 - If it is Empty then,
set head = newNode and newNode→next = head .
Step 4 - If it is Not Empty then, define a Node pointer
'temp' and initialize with 'head'.
Step 5 - Keep moving the 'temp' to its next node until it
reaches to the last node (until 'temp → next == head').
Step 6 - Set 'newNode → next =head',
'head = newNode' and 'temp → next = head'.
Inserting At the End of the list
• Steps to insert a new node at end of the circular linked
list...
Step 1 - Create a newNode with given value.
Step 2 - Check whether list is Empty (head == NULL).
Step 3 - If it is Empty then,
set head = newNode and newNode → next = head.
Step 4 - If it is Not Empty then, define a node
pointer temp and initialize with head.
Step 5 - Keep moving the temp to its next node until it reaches
to the last node in the list (until temp → next == head).
Step 6 - Set temp → next = newNode and newNode →
next = head.
Inserting At Specific location in the list (After
a Node)
Step 1 - Create a newNode with given value.
Step 2 - Check whether list is Empty (head == NULL)
Step 3 - If it is Empty then, set head = newNode and newNode → next = head.
Step 4 - If it is Not Empty then, define a node pointer temp and initialize with head.
Step 5 - Keep moving the temp to its next node until it reaches to the node after which we want to
insert the newNode (until temp1 → data is equal to location, here location is the node value after
which we want to insert the newNode).
Step 6 - Every time check whether temp is reached to the last node or not. If it is reached to last node
then display 'Given node is not found in the list!!! Insertion not possible!!!' and terminate the
function. Otherwise move the temp to next node.
Step 7 - If temp is reached to the exact node after which we want to insert the newNode then check
whether it is last node (temp → next == head).
Step 8 - If temp is last node then set temp → next = newNode and newNode → next = head.
Step 8 - If temp is not last node then set newNode → next = temp → next and temp →
next = newNode.
CLL – Insertion (ROUTINE)
Insertion at first
new->next = head
head =new;
temp->next= head;
Insertion at middle
n1->next = new;
new->next = n2;
n2->next = head;
Insertion at last
n2->next=new;
new->next = head;
CLL – Deletion Operation
• In a circular linked list, the deletion operation
can be performed in three ways those are as
follows...
1. Deleting from Beginning of the list
2. Deleting from End of the list
3. Deleting a Specific Node
DELETING FROM BEGINNING OF THE LIST
• The following steps to delete a node from beginning of the circular
linked list...
Step 1 - Check whether list is Empty (head == NULL)
Step 2 - If it is Empty then, display 'List is Empty!!! Deletion is not
possible' and terminate the function.
Step 3 - If it is Not Empty then, define two Node pointers 'temp1' and
'temp2' and initialize both 'temp1' and 'temp2' with head.
Step 4 - Check whether list is having only one node (temp1 →
next == head)
Step 5 - If it is TRUE then set head = NULL and
delete temp1 (Setting Empty list conditions)
Step 6 - If it is FALSE move the temp1 until it reaches to the last node.
(until temp1 → next == head )
Step 7 - Then set head = temp2 → next, temp1 → next = head and
delete temp2.
DELETING FROM END OF THE LIST
• The following steps to delete a node from end of the circular
linked list...
Step 1 - Check whether list is Empty (head == NULL)
Step 2 - If it is Empty then, display 'List is Empty!!! Deletion is not
possible' and terminate the function.
Step 3 - If it is Not Empty then, define two Node pointers 'temp1' and
'temp2' and initialize 'temp1' with head.
Step 4 - Check whether list has only one Node (temp1 → next == head)
Step 5 - If it is TRUE. Then, set head = NULL and delete temp1. And
terminate from the function. (Setting Empty list condition)
Step 6 - If it is FALSE. Then, set 'temp2 = temp1 ' and move temp1 to its
next node. Repeat the same until temp1 reaches to the last node in the
list. (until temp1 → next == head)
Step 7 - Set temp2 → next = head and delete temp1.
DELETING A SPECIFIC NODE FROM THE LIST
• The following steps to delete a specific node from the circular linked list...
Step 1 - Check whether list is Empty (head == NULL)
Step 2 - If it is Empty then, display 'List is Empty!!! Deletion is not possible' and terminate the function.
Step 3 - If it is Not Empty then, define two Node pointers 'temp1' and 'temp2' and initialize 'temp1'
with head.
Step 4 - Keep moving the temp1 until it reaches to the exact node to be deleted or to the last node. And
every time set 'temp2 = temp1' before moving the 'temp1' to its next node.
Step 5 - If it is reached to the last node then display 'Given node not found in the list! Deletion not
possible!!!'. And terminate the function.
Step 6 - If it is reached to the exact node which we want to delete, then check whether list is having only one
node (temp1 → next == head)
Step 7 - If list has only one node and that is the node to be deleted then set head = NULL and
delete temp1 (free(temp1)).
Step 8 - If list contains multiple nodes then check whether temp1 is the first node in the list (temp1 ==
head).
Step 9 - If temp1 is the first node then set temp2 = head and keep moving temp2 to its next node
until temp2 reaches to the last node. Then set head = head → next, temp2 → next = head and
delete temp1.
Step 10 - If temp1 is not first node then check whether it is last node in the list (temp1 → next == head).
Step 11- If temp1 is last node then set temp2 → next = head and delete temp1 (free(temp1)).
Step 12 - If temp1 is not first node and not last node then set temp2 → next = temp1 → next and
delete temp1 (free(temp1)).
CLL - Deletion Operation
//delete first item
struct node * deleteFirst() {
//save reference to first link
struct node *tempLink = head;
if(head->next == head){
head = NULL;
return tempLink;
}
//mark next to first link as first
head = head->next;
//return the deleted link
return tempLink;
}
Deleting first node from Singly Circular Linked List
• Given a Circular Linked List. The task is to write programs to delete
nodes
from this list present at:
• First position.
• Last Position.
• At any given position i.
Deleting the last node of the Circular Linked List
Deleting nodes at given index in the
Circular linked list
Array versus Linked Lists
• Linked lists are more complex to code and
manage than arrays, but they have some distinct
advantages.
• Dynamic: a linked list can easily grow and shrink in
size.
• We don’t need to know how many nodes will be in the
list. They are created in memory as needed.
• In contrast, the size of a C++ array is fixed at
compilation time.
• Easy and fast insertions and deletions
• To insert or delete an element in an array, we need to
copy to temporary variables to make room for new
elements or close the gap caused by deleted elements.
• With a linked list, no need to move other nodes. Only
need to reset some pointers.
Ad

Recommended

Circular linked list
Circular linked list
sajinis3
 
Linked list data structures and algorithms
Linked list data structures and algorithms
RaghavendraPrasad179187
 
CIRCULAR LINKED LIST _
CIRCULAR LINKED LIST _
SwatiHans10
 
Linked list
Linked list
RahulGandhi110
 
VCE Unit 02 (1).pptx
VCE Unit 02 (1).pptx
skilljiolms
 
Linked Lists.pdf
Linked Lists.pdf
Kaynattariq1
 
Doubly & Circular Linked Lists
Doubly & Circular Linked Lists
Afaq Mansoor Khan
 
Deleting a node from the list(SINGLE LINKED LIST)
Deleting a node from the list(SINGLE LINKED LIST)
JayasankarShyam
 
Operations on linked list
Operations on linked list
Sumathi Kv
 
Chapter 3 Linkedlist Data Structure .pdf
Chapter 3 Linkedlist Data Structure .pdf
Axmedcarb
 
ds 4Linked lists.ppt
ds 4Linked lists.ppt
AlliVinay1
 
Singly linked list
Singly linked list
Amar Jukuntla
 
DSA(1).pptx
DSA(1).pptx
DaniyalAli81
 
Data Structure and Algorithms Linked List
Data Structure and Algorithms Linked List
ManishPrajapati78
 
Linked List
Linked List
Md gulam sarwar
 
DSA chapter 4.pptxhdjaaaaaadjhsssssssssssssssssssssssssss
DSA chapter 4.pptxhdjaaaaaadjhsssssssssssssssssssssssssss
beshahashenafe20
 
Circular linked list
Circular linked list
maamir farooq
 
DSModule2.pptx
DSModule2.pptx
ChrisSosaJacob
 
Team 10
Team 10
Sathasivam Rangasamy
 
Unit ii(dsc++)
Unit ii(dsc++)
Durga Devi
 
Linked List in Data Structure
Linked List in Data Structure
Meghaj Mallick
 
DS_LinkedList.pptx
DS_LinkedList.pptx
msohail37
 
Unit 5 linked list
Unit 5 linked list
Dabbal Singh Mahara
 
Document on Linked List as a presentation
Document on Linked List as a presentation
bindiyap3
 
Document on Linked List as a presentation
Document on Linked List as a presentation
bindiyap3
 
DS UNIT4_OTHER LIST STRUCTURES.docx
DS UNIT4_OTHER LIST STRUCTURES.docx
VeerannaKotagi1
 
Linked List, basics , types , operations
Linked List, basics , types , operations
ankita946617
 
Linked list
Linked list
Lovely Professional University
 
Industry 4.o the fourth revolutionWeek-2.pptx
Industry 4.o the fourth revolutionWeek-2.pptx
KNaveenKumarECE
 
60 Years and Beyond eBook 1234567891.pdf
60 Years and Beyond eBook 1234567891.pdf
waseemalazzeh
 

More Related Content

Similar to Data structure and algorithm list structures (20)

Operations on linked list
Operations on linked list
Sumathi Kv
 
Chapter 3 Linkedlist Data Structure .pdf
Chapter 3 Linkedlist Data Structure .pdf
Axmedcarb
 
ds 4Linked lists.ppt
ds 4Linked lists.ppt
AlliVinay1
 
Singly linked list
Singly linked list
Amar Jukuntla
 
DSA(1).pptx
DSA(1).pptx
DaniyalAli81
 
Data Structure and Algorithms Linked List
Data Structure and Algorithms Linked List
ManishPrajapati78
 
Linked List
Linked List
Md gulam sarwar
 
DSA chapter 4.pptxhdjaaaaaadjhsssssssssssssssssssssssssss
DSA chapter 4.pptxhdjaaaaaadjhsssssssssssssssssssssssssss
beshahashenafe20
 
Circular linked list
Circular linked list
maamir farooq
 
DSModule2.pptx
DSModule2.pptx
ChrisSosaJacob
 
Team 10
Team 10
Sathasivam Rangasamy
 
Unit ii(dsc++)
Unit ii(dsc++)
Durga Devi
 
Linked List in Data Structure
Linked List in Data Structure
Meghaj Mallick
 
DS_LinkedList.pptx
DS_LinkedList.pptx
msohail37
 
Unit 5 linked list
Unit 5 linked list
Dabbal Singh Mahara
 
Document on Linked List as a presentation
Document on Linked List as a presentation
bindiyap3
 
Document on Linked List as a presentation
Document on Linked List as a presentation
bindiyap3
 
DS UNIT4_OTHER LIST STRUCTURES.docx
DS UNIT4_OTHER LIST STRUCTURES.docx
VeerannaKotagi1
 
Linked List, basics , types , operations
Linked List, basics , types , operations
ankita946617
 
Linked list
Linked list
Lovely Professional University
 
Operations on linked list
Operations on linked list
Sumathi Kv
 
Chapter 3 Linkedlist Data Structure .pdf
Chapter 3 Linkedlist Data Structure .pdf
Axmedcarb
 
ds 4Linked lists.ppt
ds 4Linked lists.ppt
AlliVinay1
 
Data Structure and Algorithms Linked List
Data Structure and Algorithms Linked List
ManishPrajapati78
 
DSA chapter 4.pptxhdjaaaaaadjhsssssssssssssssssssssssssss
DSA chapter 4.pptxhdjaaaaaadjhsssssssssssssssssssssssssss
beshahashenafe20
 
Circular linked list
Circular linked list
maamir farooq
 
Unit ii(dsc++)
Unit ii(dsc++)
Durga Devi
 
Linked List in Data Structure
Linked List in Data Structure
Meghaj Mallick
 
DS_LinkedList.pptx
DS_LinkedList.pptx
msohail37
 
Document on Linked List as a presentation
Document on Linked List as a presentation
bindiyap3
 
Document on Linked List as a presentation
Document on Linked List as a presentation
bindiyap3
 
DS UNIT4_OTHER LIST STRUCTURES.docx
DS UNIT4_OTHER LIST STRUCTURES.docx
VeerannaKotagi1
 
Linked List, basics , types , operations
Linked List, basics , types , operations
ankita946617
 

Recently uploaded (20)

Industry 4.o the fourth revolutionWeek-2.pptx
Industry 4.o the fourth revolutionWeek-2.pptx
KNaveenKumarECE
 
60 Years and Beyond eBook 1234567891.pdf
60 Years and Beyond eBook 1234567891.pdf
waseemalazzeh
 
special_edition_using_visual_foxpro_6.pdf
special_edition_using_visual_foxpro_6.pdf
Shabista Imam
 
Abraham Silberschatz-Operating System Concepts (9th,2012.12).pdf
Abraham Silberschatz-Operating System Concepts (9th,2012.12).pdf
Shabista Imam
 
How to Un-Obsolete Your Legacy Keypad Design
How to Un-Obsolete Your Legacy Keypad Design
Epec Engineered Technologies
 
Fundamentals of Digital Design_Class_21st May - Copy.pptx
Fundamentals of Digital Design_Class_21st May - Copy.pptx
drdebarshi1993
 
Modern multi-proposer consensus implementations
Modern multi-proposer consensus implementations
François Garillot
 
Deep Learning for Image Processing on 16 June 2025 MITS.pptx
Deep Learning for Image Processing on 16 June 2025 MITS.pptx
resming1
 
Unit III_One Dimensional Consolidation theory
Unit III_One Dimensional Consolidation theory
saravananr808639
 
IPL_Logic_Flow.pdf Mainframe IPLMainframe IPL
IPL_Logic_Flow.pdf Mainframe IPLMainframe IPL
KhadijaKhadijaAouadi
 
Introduction to Natural Language Processing - Stages in NLP Pipeline, Challen...
Introduction to Natural Language Processing - Stages in NLP Pipeline, Challen...
resming1
 
(Continuous Integration and Continuous Deployment/Delivery) is a fundamental ...
(Continuous Integration and Continuous Deployment/Delivery) is a fundamental ...
ketan09101
 
Proposal for folders structure division in projects.pdf
Proposal for folders structure division in projects.pdf
Mohamed Ahmed
 
FUNDAMENTALS OF COMPUTER ORGANIZATION AND ARCHITECTURE
FUNDAMENTALS OF COMPUTER ORGANIZATION AND ARCHITECTURE
Shabista Imam
 
NEW Strengthened Senior High School Gen Math.pptx
NEW Strengthened Senior High School Gen Math.pptx
DaryllWhere
 
Complete University of Calculus :: 2nd edition
Complete University of Calculus :: 2nd edition
Shabista Imam
 
machine learning is a advance technology
machine learning is a advance technology
ynancy893
 
Stay Safe Women Security Android App Project Report.pdf
Stay Safe Women Security Android App Project Report.pdf
Kamal Acharya
 
362 Alec Data Center Solutions-Slysium Data Center-AUH-Adaptaflex.pdf
362 Alec Data Center Solutions-Slysium Data Center-AUH-Adaptaflex.pdf
djiceramil
 
Introduction to sensing and Week-1.pptx
Introduction to sensing and Week-1.pptx
KNaveenKumarECE
 
Industry 4.o the fourth revolutionWeek-2.pptx
Industry 4.o the fourth revolutionWeek-2.pptx
KNaveenKumarECE
 
60 Years and Beyond eBook 1234567891.pdf
60 Years and Beyond eBook 1234567891.pdf
waseemalazzeh
 
special_edition_using_visual_foxpro_6.pdf
special_edition_using_visual_foxpro_6.pdf
Shabista Imam
 
Abraham Silberschatz-Operating System Concepts (9th,2012.12).pdf
Abraham Silberschatz-Operating System Concepts (9th,2012.12).pdf
Shabista Imam
 
Fundamentals of Digital Design_Class_21st May - Copy.pptx
Fundamentals of Digital Design_Class_21st May - Copy.pptx
drdebarshi1993
 
Modern multi-proposer consensus implementations
Modern multi-proposer consensus implementations
François Garillot
 
Deep Learning for Image Processing on 16 June 2025 MITS.pptx
Deep Learning for Image Processing on 16 June 2025 MITS.pptx
resming1
 
Unit III_One Dimensional Consolidation theory
Unit III_One Dimensional Consolidation theory
saravananr808639
 
IPL_Logic_Flow.pdf Mainframe IPLMainframe IPL
IPL_Logic_Flow.pdf Mainframe IPLMainframe IPL
KhadijaKhadijaAouadi
 
Introduction to Natural Language Processing - Stages in NLP Pipeline, Challen...
Introduction to Natural Language Processing - Stages in NLP Pipeline, Challen...
resming1
 
(Continuous Integration and Continuous Deployment/Delivery) is a fundamental ...
(Continuous Integration and Continuous Deployment/Delivery) is a fundamental ...
ketan09101
 
Proposal for folders structure division in projects.pdf
Proposal for folders structure division in projects.pdf
Mohamed Ahmed
 
FUNDAMENTALS OF COMPUTER ORGANIZATION AND ARCHITECTURE
FUNDAMENTALS OF COMPUTER ORGANIZATION AND ARCHITECTURE
Shabista Imam
 
NEW Strengthened Senior High School Gen Math.pptx
NEW Strengthened Senior High School Gen Math.pptx
DaryllWhere
 
Complete University of Calculus :: 2nd edition
Complete University of Calculus :: 2nd edition
Shabista Imam
 
machine learning is a advance technology
machine learning is a advance technology
ynancy893
 
Stay Safe Women Security Android App Project Report.pdf
Stay Safe Women Security Android App Project Report.pdf
Kamal Acharya
 
362 Alec Data Center Solutions-Slysium Data Center-AUH-Adaptaflex.pdf
362 Alec Data Center Solutions-Slysium Data Center-AUH-Adaptaflex.pdf
djiceramil
 
Introduction to sensing and Week-1.pptx
Introduction to sensing and Week-1.pptx
KNaveenKumarECE
 
Ad

Data structure and algorithm list structures

  • 1. Memory Representation of a doubly linked list Memory Representation of a doubly linked list is shown in the following image. Generally, doubly linked list consumes more space for every node and therefore, causes more expansive basic operations such as insertion and deletion. However, we can easily manipulate the elements of the list since the list maintains pointers in both the directions (forward and backward). In the following image, the first element of the list that is i.e. 13 stored at address 1. The head pointer points to the starting address 1. Since this is the first element being added to the list therefore the prev of the list contains null. The next node of the list resides at address 4 therefore the first node contains 4 in its next pointer. We can traverse the list in this way until we find any node containing null or -1 in its next part.
  • 2. Operations on doubly linked list Node Creation struct node { struct node *prev; int data; struct node *next; }; struct node *head; Node Creation oid insertion_beginning() { struct node *ptr; int item; ptr = (struct node *)malloc(sizeof(struct node)); if(ptr == NULL) { printf("nOVERFLOW"); } else { printf("nEnter Item value"); scanf("%d",&item); if(head==NULL) { ptr->next = NULL; ptr->prev=NULL; ptr->data=item; head=ptr; } else { ptr->data=item; ptr->prev=NULL; ptr->next = head; head->prev=ptr; head=ptr; } printf("nNode insertedn"); } } void deletion_beginning() { struct node *ptr; if(head == NULL) { printf("n UNDERFLOW"); } else if(head->next == NULL) { head = NULL; free(head); printf("nnode deletedn"); } else { ptr = head; head = head -> next; head -> prev = NULL; free(ptr); printf("nnode deletedn"); } }
  • 3. Operations on doubly linked list void search() { struct node *ptr; int item,i=0,flag; ptr = head; if(ptr == NULL) { printf("nEmpty Listn"); } else { printf(" nEnter item which you want to search? n"); scanf("%d",&item); while (ptr!=NULL) { if(ptr->data == item) { printf(" nitem found at location %d ",i+1); flag=0; break; } else { flag=1; } i++; ptr = ptr -> next; } if(flag==1) { printf("nItem not foundn"); } } }
  • 4. Circular Linked List • Circular linked list is a linked list where all nodes are connected to form a circle. • There is no NULL at the end. • A circular linked list can be a singly circular linked list or doubly circular linked list.
  • 5. Advantages of Circular Linked Lists • Any node can be a starting point. We can traverse the whole list by starting from any point. We just need to stop when the first visited node is visited again. • Useful for implementation of queue. • For example, when multiple applications are running on a PC
  • 6. OPERATIONS ON CIRCULARLY LINKED LIST • Insertion • Deletion • Display Circular linked list – Creation temp=head; temp->next = new; new -> next = head;
  • 7. Insertion in a Circular Linked List 1. Inserting At Beginning of the list 2. Inserting At End of the list 3. Inserting At Specific location in the list
  • 8. Inserting At Beginning of the list Steps to insert a new node at beginning of the circular linked list... Step 1 - Create a newNode with given value. Step 2 - Check whether list is Empty (head == NULL) Step 3 - If it is Empty then, set head = newNode and newNode→next = head . Step 4 - If it is Not Empty then, define a Node pointer 'temp' and initialize with 'head'. Step 5 - Keep moving the 'temp' to its next node until it reaches to the last node (until 'temp → next == head'). Step 6 - Set 'newNode → next =head', 'head = newNode' and 'temp → next = head'.
  • 9. Inserting At the End of the list • Steps to insert a new node at end of the circular linked list... Step 1 - Create a newNode with given value. Step 2 - Check whether list is Empty (head == NULL). Step 3 - If it is Empty then, set head = newNode and newNode → next = head. Step 4 - If it is Not Empty then, define a node pointer temp and initialize with head. Step 5 - Keep moving the temp to its next node until it reaches to the last node in the list (until temp → next == head). Step 6 - Set temp → next = newNode and newNode → next = head.
  • 10. Inserting At Specific location in the list (After a Node) Step 1 - Create a newNode with given value. Step 2 - Check whether list is Empty (head == NULL) Step 3 - If it is Empty then, set head = newNode and newNode → next = head. Step 4 - If it is Not Empty then, define a node pointer temp and initialize with head. Step 5 - Keep moving the temp to its next node until it reaches to the node after which we want to insert the newNode (until temp1 → data is equal to location, here location is the node value after which we want to insert the newNode). Step 6 - Every time check whether temp is reached to the last node or not. If it is reached to last node then display 'Given node is not found in the list!!! Insertion not possible!!!' and terminate the function. Otherwise move the temp to next node. Step 7 - If temp is reached to the exact node after which we want to insert the newNode then check whether it is last node (temp → next == head). Step 8 - If temp is last node then set temp → next = newNode and newNode → next = head. Step 8 - If temp is not last node then set newNode → next = temp → next and temp → next = newNode.
  • 11. CLL – Insertion (ROUTINE) Insertion at first new->next = head head =new; temp->next= head; Insertion at middle n1->next = new; new->next = n2; n2->next = head; Insertion at last n2->next=new; new->next = head;
  • 12. CLL – Deletion Operation • In a circular linked list, the deletion operation can be performed in three ways those are as follows... 1. Deleting from Beginning of the list 2. Deleting from End of the list 3. Deleting a Specific Node
  • 13. DELETING FROM BEGINNING OF THE LIST • The following steps to delete a node from beginning of the circular linked list... Step 1 - Check whether list is Empty (head == NULL) Step 2 - If it is Empty then, display 'List is Empty!!! Deletion is not possible' and terminate the function. Step 3 - If it is Not Empty then, define two Node pointers 'temp1' and 'temp2' and initialize both 'temp1' and 'temp2' with head. Step 4 - Check whether list is having only one node (temp1 → next == head) Step 5 - If it is TRUE then set head = NULL and delete temp1 (Setting Empty list conditions) Step 6 - If it is FALSE move the temp1 until it reaches to the last node. (until temp1 → next == head ) Step 7 - Then set head = temp2 → next, temp1 → next = head and delete temp2.
  • 14. DELETING FROM END OF THE LIST • The following steps to delete a node from end of the circular linked list... Step 1 - Check whether list is Empty (head == NULL) Step 2 - If it is Empty then, display 'List is Empty!!! Deletion is not possible' and terminate the function. Step 3 - If it is Not Empty then, define two Node pointers 'temp1' and 'temp2' and initialize 'temp1' with head. Step 4 - Check whether list has only one Node (temp1 → next == head) Step 5 - If it is TRUE. Then, set head = NULL and delete temp1. And terminate from the function. (Setting Empty list condition) Step 6 - If it is FALSE. Then, set 'temp2 = temp1 ' and move temp1 to its next node. Repeat the same until temp1 reaches to the last node in the list. (until temp1 → next == head) Step 7 - Set temp2 → next = head and delete temp1.
  • 15. DELETING A SPECIFIC NODE FROM THE LIST • The following steps to delete a specific node from the circular linked list... Step 1 - Check whether list is Empty (head == NULL) Step 2 - If it is Empty then, display 'List is Empty!!! Deletion is not possible' and terminate the function. Step 3 - If it is Not Empty then, define two Node pointers 'temp1' and 'temp2' and initialize 'temp1' with head. Step 4 - Keep moving the temp1 until it reaches to the exact node to be deleted or to the last node. And every time set 'temp2 = temp1' before moving the 'temp1' to its next node. Step 5 - If it is reached to the last node then display 'Given node not found in the list! Deletion not possible!!!'. And terminate the function. Step 6 - If it is reached to the exact node which we want to delete, then check whether list is having only one node (temp1 → next == head) Step 7 - If list has only one node and that is the node to be deleted then set head = NULL and delete temp1 (free(temp1)). Step 8 - If list contains multiple nodes then check whether temp1 is the first node in the list (temp1 == head). Step 9 - If temp1 is the first node then set temp2 = head and keep moving temp2 to its next node until temp2 reaches to the last node. Then set head = head → next, temp2 → next = head and delete temp1. Step 10 - If temp1 is not first node then check whether it is last node in the list (temp1 → next == head). Step 11- If temp1 is last node then set temp2 → next = head and delete temp1 (free(temp1)). Step 12 - If temp1 is not first node and not last node then set temp2 → next = temp1 → next and delete temp1 (free(temp1)).
  • 16. CLL - Deletion Operation //delete first item struct node * deleteFirst() { //save reference to first link struct node *tempLink = head; if(head->next == head){ head = NULL; return tempLink; } //mark next to first link as first head = head->next; //return the deleted link return tempLink; }
  • 17. Deleting first node from Singly Circular Linked List • Given a Circular Linked List. The task is to write programs to delete nodes from this list present at: • First position. • Last Position. • At any given position i.
  • 18. Deleting the last node of the Circular Linked List
  • 19. Deleting nodes at given index in the Circular linked list
  • 20. Array versus Linked Lists • Linked lists are more complex to code and manage than arrays, but they have some distinct advantages. • Dynamic: a linked list can easily grow and shrink in size. • We don’t need to know how many nodes will be in the list. They are created in memory as needed. • In contrast, the size of a C++ array is fixed at compilation time. • Easy and fast insertions and deletions • To insert or delete an element in an array, we need to copy to temporary variables to make room for new elements or close the gap caused by deleted elements. • With a linked list, no need to move other nodes. Only need to reset some pointers.