You are here:   HomeData StructuresLinked ListsCircularly-linked list vs. linearly-linked list
by Dinesh Thakur Category: Linked Lists

Circularly linked lists are useful to traverse an entire list starting at any point. In a linear linked list, it is required to know the head pointer to traverse the entire list. The linear linked list cannot be traversed completely with the help of an intermediate pointer.

 

Access to any element in a doubly circularly linked list is much easier than in a linearly linked list since the particular element can be approached in two directions. For example to access an element present in the fourth node of a circularly linked list having five elements, it is enough to start from the last node and traverse the list in the reverse direction to get the value in the fourth node.

 

Implementation of a circular linked list:

 

Creating the list

 

while (input_element != -999)

{

new_node=(struct node *) malloc (size);

new_node->info=input_element;

if ( root_node==NULL )

root_node=new_node;

else

( *last_node )->next=new_node;

(*last_node)=new_node;

scanf("%d",&input_element);

}

if(root!=NULL)

new->next=root;

return root;

 

Inserting elements into the list

 

After getting the position and value to be inserted, the following code can be followed:

 

new_node=(struct node *)malloc(sizeof(struct node));

new_node-> info=input_element;

 

if((position==1)||((*root_node)==NULL))

{

new_node->next =*root_node;

*root_node = new_node;

if((*last_node)!=NULL)

(*last_node)->next=*root_node;

else

*last_node=*start_node;

}

else

{

temp_node=*root_node;

counter=2;

while ( (counter<position) && (temp_node->next !=

(*root_node) ) )

{

temp_node=temp_node->next;

++counter;

}

if(temp_node->next==(*root_node))

*last_node=new_node;

new_node->next=temp_node->next;

temp_node->next=new_node;

}

 

Deleting an element from the list

 

After getting the element to be deleted, the following code can be used:

 

If(*front_node != NULL)

{

printf(“The item deleted is %d”,(*front_node->info));

If (*front_node == *rear_node)

{

*front_node = *rear_node = NULL;

}

else

{

*front_node = *front_node->next;

*rear_node->link = *front_node;

}

}



Subscribe To Free Daily Newsletter!

Get Free News Updates Delivered Directly To Your Inbox
About Dinesh Thakur

Dinesh ThakurDinesh Thakur holds an B.SC (Computer Science), MCSE, MCDBA, CCNA, CCNP, A+, SCJP certifications. Dinesh authors the hugely popular Computer Notes blog. Where he writes how-to guides around Computer fundamental , computer software, Computer programming, and web apps. For any type of query or something that you think is missing, please feel free to contact us.



What's New and Popular





Search Content







Advance Courses



Basic Courses



Advertise with Us