• Skip to primary navigation
  • Skip to content
  • Skip to primary sidebar
  • Skip to secondary sidebar

GoHired

Interview Questions asked in Google, Microsoft, Amazon

Join WeekEnd Online Batch from 4-April-2020 on How to Crack Coding Interview in Just 10 Weeks : Fees just 20,000 INR

  • Home
  • Best Java Books
  • Algorithm
  • Internship
  • Certificates
  • About Us
  • Contact Us
  • Privacy Policy
  • Array
  • Stack
  • Queue
  • LinkedList
  • DP
  • Strings
  • Tree
  • Mathametical
  • Puzzles
  • Graph

Circular Linked List

February 26, 2014 by Dhaval Dave

In the last node of a list, the link field often contains a null reference, a special value used to indicate the lack of further nodes. A less common convention is to make it point to the first node of the list; in that case the list is said to be circular or circularly linked; otherwise it is said to be open or linear.


// Program of circular linked list
#include <stdio.h>
#include <malloc.h>
 
struct node
{
  int info;
  struct node *link;
}*last;
 
main()
{
  int choice,n,m,po,i;
  last=NULL;
  while(1)
  {
    printf("1.Create Listn");
    printf("2.Add at beginingn");
    printf("3.Add after n");
    printf("4.Deleten");
    printf("5.Displayn");
    printf("6.Quitn");
    printf("Enter your choice : ");
    scanf("%d",&choice);
 
    switch(choice)
    {
     case 1:
      printf("How many nodes you want : ");
      scanf("%d",&n);
      for(i=0; i < n;i++)
      {
        printf("Enter the element : ");
        scanf("%d",&m);
        create_list(m);
      }
      break;
     case 2:
      printf("Enter the element : ");
      scanf("%d",&m);
      addatbeg(m);
      break;
     case 3:
      printf("Enter the element : ");
      scanf("%d",&m);
      printf("Enter the position after which this element is inserted : ");
      scanf("%d",&po);
      addafter(m,po);
      break;
     case 4:
      if(last == NULL)
      {
        printf("List underflown");
        continue;
      }
      printf("Enter the number for deletion : ");
      scanf("%d",&m);
      del(m);
      break;
     case 5:
      display();
      break;
     case 6:
      exit();
     default:
      printf("Wrong choicen");
    }/*End of switch*/
  }/*End of while*/
}/*End of main()*/
 
create_list(int num)
{
  struct node *q,*tmp;
  tmp= malloc(sizeof(struct node));
  tmp->info = num;
 
  if(last == NULL)
  {
    last = tmp;
    tmp->link = last;
  }
  else
  {
    tmp->link = last->link; /*added at the end of list*/
    last->link = tmp;
    last = tmp;
  }
}/*End of create_list()*/
 
addatbeg(int num)
{
  struct node *tmp;
  tmp = malloc(sizeof(struct node));
  tmp->info = num;
  tmp->link = last->link;
  last->link = tmp;
}/*End of addatbeg()*/
 
addafter(int num,int pos)
{
 
  struct node *tmp,*q;
  int i;
  q = last->link;
  for(i=0; i < pos-1; i++)
  {
    q = q->link;
    if(q == last->link)
    {
      printf("There are less than %d elementsn",pos);
      return;
    }
  }/*End of for*/
  tmp = malloc(sizeof(struct node) );
  tmp->link = q->link;
  tmp->info = num;
  q->link = tmp;
  if(q==last)    /*Element inserted at the end*/
    last=tmp;
}/*End of addafter()*/
 
del(int num)
{
  struct node *tmp,*q;
  if( last->link == last && last->info == num)  /*Only one element*/
  {
    tmp = last;
    last = NULL;
    free(tmp);
    return;
  }
  q = last->link;
  if(q->info == num)
  {
    tmp = q;
    last->link = q->link;
    free(tmp);
    return;
  }
  while(q->link != last)
  {
    if(q->link->info == num)     /*Element deleted in between*/
    {
      tmp = q->link;
      q->link = tmp->link;
      free(tmp);
      printf("%d deletedn",num);
      return;
    }
    q = q->link;
  }/*End of while*/
  if(q->link->info == num)    /*Last element deleted q->link=last*/
  {
    tmp = q->link;
    q->link = last->link;
    free(tmp);
    last = q;
    return;
  }
  printf("Element %d not foundn",num);
}/*End of del()*/
 
display()
{
  struct node *q;
  if(last == NULL)
  {
    printf("List is emptyn");
    return;
  }
  q = last->link;
  printf("List is :n");
  while(q != last)
  {
    printf("%d ", q->info);
    q = q->link;
  }
  printf("%dn",last->info);
}/*End of display()*

Similar Articles

Filed Under: problem Tagged With: Linked List

Reader Interactions

Primary Sidebar

Join WeekEnd Online/Offline Batch from 4-April-2020 on How to Crack Coding Interview in Just 10 Weeks : Fees just 20,000 INR

Join WeekEnd Online/Offline Batch from 4-April-2020

WhatsApp us

Secondary Sidebar

Custom Search

  • How I cracked AMAZON
  • LeetCode
  • Adobe
  • Amazon
  • Facebook
  • Microsoft
  • Hacker Earth
  • CSE Interview

Top Rated Questions

In Given LinkedList Divide LL in N Sub parts and delete first K nodes of each part

System Design: Designing a LLD for Hotel Booking

1014 Practice Question of New GRE – Princeton

VMWare Openings

Maximum sum contiguous subarray of an Array

Find loop in Singly linked list

Maximum occurred Smallest integer in n ranges

Templates in C++

Singly linked list

SAP Hiring Off-Campus General Aptitude

Print Power Set of a Set

robot standing at first cell of an M*N matrix. It can move only in two directions, right and down. In how many ways, it can reach to the last cell i.e. (M, N) Code it

Find Nearest Minimum number in left side in O(n)

The Magic HackerEarth Nirvana solutions Hiring Challenge

Maximum of all subarrays of size k

Linked List V/S Binary Search Tree

Given a float number convert it into the string WITHOUT using any inbuilt Function

Fibonacci Hashing & Fastest Hashtable

CodeChef Code SGARDEN

Find an index i such that Arr [i] = i in array of n distinct integers sorted in ascending order.

Count Possible Decodings of a given Digit Sequence

Knight Tour Problem (Graph – Breadth First Search)

Edit Distance ( Dynamic Programming )

LeetCode: Container With Most Water

Find the kth number with prime factors 3, 5 and 7

How strtok() Works

K’th Largest Element in BST when modification to BST is not allowed

Python Dictionaries

25 horses 5 tracks Find 3 fastest puzzle

Stickler thief

Copyright © 2026 · Genesis Framework · WordPress · Log in