Skip to content

Instantly share code, notes, and snippets.

@AakashCode12
Created September 26, 2020 10:16
Show Gist options
  • Save AakashCode12/6c8c10052c3089826761a5ff319d0bf9 to your computer and use it in GitHub Desktop.
Save AakashCode12/6c8c10052c3089826761a5ff319d0bf9 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
//todo Strcuture Definition
struct node
{
int data;
struct node *next;
};
struct node *head, *newnode, *temp, *prev, *prev1, *temp2;
// todo function prototyping
void normalCreation(); //?---1
void insertBeginning(); //*---2
void insertEnd(); //?---3
void insertBefore(); //*---4
void insertAfter(); //?---5
void deleteStart(); //*---6
void deleteEnd(); //?---7
void deleteBefore(); //*---8
void deleteAfter(); //?---9
void deleteNode(); //*---10
void searchNode(); //?---11
void display(); //*---12
//todo Function--Normal Creation -1 (Done)--tested
void normalCreation()
{
int noOfElements;
printf("\nEnter the No of Elements you want to add in the Linked List : ");
scanf("%d", &noOfElements);
for (int i = 0; i < noOfElements; i++)
{
newnode = (struct node *)malloc(sizeof(struct node));
printf("\nEnter The Value you want to Add : ");
scanf("%d", &newnode->data);
if (head == NULL)
{
head = newnode;
newnode->next = newnode;
}
else
{
temp = head;
while (temp->next != head)
{
temp = temp->next;
}
newnode->next = head;
temp->next = newnode;
}
}
}
//todo Function--Insert Beginning -2 (Done)--tested
void insertBeginning()
{
newnode = (struct node *)malloc(sizeof(struct node));
printf("\nEnter The Value you want to Add : ");
scanf("%d", &newnode->data);
temp = head;
if (head == NULL)
{
head = newnode;
newnode->next = newnode;
}
else
{
temp = head;
while (temp->next != head)
{
temp = temp->next;
}
newnode->next = head;
temp->next = newnode;
head = newnode;
}
}
//todo Function--Insert End -3 (Done)--tested
void insertEnd()
{
newnode = (struct node *)malloc(sizeof(struct node));
printf("\nEnter The Value you want to Add : ");
scanf("%d", &newnode->data);
newnode->next = NULL;
if (head == NULL)
{
head = newnode;
newnode->next = newnode;
}
else
{
temp = head;
while (temp->next != head)
{
temp = temp->next;
}
temp->next = newnode;
newnode->next = head;
}
}
//todo Function--Insert before -4 (Done)--tested
void insertBefore()
{
if (head == NULL)
{
printf("\nYou need Atleast one Element in Linked List to Use This Function\n");
}
else
{
int num;
printf("\nEnter the Data Before which you want to Insert the node : ");
scanf("%d", &num);
printf("\nEnter the value you want to add : ");
newnode = (struct node *)malloc(sizeof(struct node));
scanf("%d", &newnode->data);
if (head->data == num)
{
temp = head;
while (temp->next != head)
{
temp = temp->next;
}
newnode->next = head;
temp->next = newnode;
head = newnode;
}
else
{
temp = head;
while (temp->data != num)
{
prev = temp;
temp = temp->next;
}
prev->next = newnode;
newnode->next = temp;
}
}
}
//todo Function--Insert After -5 (Done)--insert at start me bas error is coming
void insertAfter()
{
if (head == NULL)
{
printf("\nYou need Atleast one Element in Linked List to Use This Function\n");
}
else
{
int num;
printf("\nEnter the Data After which you want to Insert the node : ");
scanf("%d", &num);
printf("\nEnter the value you want to add : ");
newnode = (struct node *)malloc(sizeof(struct node));
scanf("%d", &newnode->data);
if (head->data == num)
{
temp = head;
while (temp->next != head)
{
temp = temp->next;
}
temp->next = newnode;
newnode->next = head;
}
else
{
temp = head;
while (temp->data != num)
{
temp = temp->next;
}
newnode->next = temp->next;
temp->next = newnode;
}
}
}
//todo Function--Delete Start -6 ( done)--tested (had a bug that it cant remove last element if follwed ma'am's'pdf )
//todo to remove that bug added an else if separrately for only single element
void deleteStart()
{
if (head == NULL)
{
printf("\nYou need Atleast one Element in Linked List to Use This Function\n");
}
else if (head->next == head) //means only one element
{
temp = head;
printf("\nThe Element removed is : %d\n", temp->data);
free(temp);
head = NULL;
}
else
{
temp = head;
while (temp->next != head)
{
temp = temp->next;
}
temp->next = head->next;
printf("\nThe Element removed is : %d\n", head->data);
free(head);
head = temp->next;
}
}
//todo Function--Delete End -7 (Done)--tested
void deleteEnd()
{
if (head == NULL)
{
printf("\nYou need Atleast one Element in Linked List to Use This Function\n");
}
else if (head->next == head) //means only one element
{
temp = head;
printf("\nThe Element removed is : %d\n", temp->data);
free(temp);
head = NULL;
}
else
{
temp = head;
while (temp->next != head)
{
prev = temp;
temp = temp->next;
}
prev->next = temp->next;
printf("\nThe Element removed is : %d\n", temp->data);
free(temp);
}
}
//todo Function--Delete Before-8 (Done)--Done perfectly--tested
void deleteBefore()
{
if (head == NULL || head->next == NULL)
{
printf("\nYou need Atleast Two Elements in Linked List to Use This Function\n");
}
else
{
int num;
printf("\nEnter the Data Whose Before node you want to Delete : ");
scanf("%d", &num);
temp = head;
temp2 = temp->next;
if (temp2->data == num)
{
deleteStart();
}
else
{
temp = head;
prev = temp;
while (temp->data != num)
{
prev1 = prev;
prev = temp;
temp = temp->next;
}
prev1->next = temp;
printf("\nThe Element removed is : %d\n", prev->data);
free(prev);
}
}
}
//todo Function--Delete After Node-9 ()--tested ---(just the last element will not remove first)--else sahi hai
void deleteAfter()
{
if (head == NULL || head->next == NULL)
{
printf("\nYou need Atleast Two Elements in Linked List to Use This Function\n");
}
else
{
int num;
printf("\nEnter the Data Whose next node you want to Delete : ");
scanf("%d", &num);
temp = head;
while (temp->data != num)
{
temp = temp->next;
}
prev = temp;
temp = temp->next;
if (temp->next == NULL)
{
prev->next = NULL;
}
prev->next = temp->next;
printf("\nThe Element removed is : %d\n", temp->data);
free(temp);
}
}
//todo Function--Delete Specified Node-10 (Done) --Still doubt(pura galat)
void deleteNode()
{
if (head == NULL)
{
printf("\nYou need Atleast one Element in Linked List to Use This Function\n");
}
else
{
int num;
printf("\nEnter the Data which you want to Delete from the Node : ");
scanf("%d", &num);
temp = head;
if (head->data == num && head->next == NULL)
{
head = NULL;
printf("\nThe Element removed is : %d\n", temp->data);
free(temp);
}
else if (head->data == num && head->next != NULL)
{
head = head->next;
printf("\nThe Element removed is : %d\n", temp->data);
free(temp);
}
else
{
while (temp->data != num)
{
prev = temp;
temp = temp->next;
}
if (temp->next = head)
{
deleteEnd();
}
else
{
prev->next = temp->next;
printf("\nThe Element removed is : %d\n", temp->data);
free(temp);
}
}
}
}
//todo Function--Search A Node Function -11 (done)--tested
void searchNode()
{
if (head == NULL)
{
printf("\nThe Linked List is Empty\n");
}
else
{
int num, counter = 0;
printf("\nEnter the Data you want to search : ");
scanf("%d", &num);
temp = head;
while (temp->data != num)
{
counter++;
temp = temp->next;
}
printf("\nThe position of the node is : %d\n", counter);
}
}
//todo Function--Display Function -12 (Done)--tested
void display()
{
temp = head;
while (temp->next != head)
{
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("%d & repeat", temp->data);
}
//todo main function--working (Done)
int main()
{
head = NULL; //!NULL given to head pointer
int option = 0;
printf("\nThe Circular Linked List\n");
printf("\n***--------Main Menu--------***");
printf("\nPress the following keys for following functions");
printf("\n1) Initial Creation\n2) Insert Begining\n3) Insert End\n4) Insert Before\n5) Insert After\n6) Delete Start\n7) Delete End\n8) Delete Before\n9) Delete After\n10) Delete Specified Node\n11) Search Node\n12) Display\n13) Exit\n");
do
{
printf("\nYou want to Perform Function No : ");
scanf("%d", &option);
switch (option)
{
case 1:
normalCreation();
break;
case 2:
insertBeginning();
break;
case 3:
insertEnd();
break;
case 4:
insertBefore();
break;
case 5:
insertAfter();
break;
case 6:
deleteStart();
break;
case 7:
deleteEnd();
break;
case 8:
deleteBefore();
break;
case 9:
deleteAfter();
break;
case 10:
deleteNode();
break;
case 11:
searchNode();
break;
case 12:
display();
break;
case 13:
//! writing so that it does not come in default when we select option 12
break;
default:
printf("\nInvalid Option key is pressed\n");
break;
}
} while (option != 13);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment