From 248446eb9ee757e5e82753ad0ce5abc377a6d4ed Mon Sep 17 00:00:00 2001 From: Aarohi Verma <55794065+Aarohi99@users.noreply.github.com> Date: Wed, 7 Oct 2020 23:19:33 +0530 Subject: [PATCH] Circular Linked List Circular Linked List --- Circular Linked List | 115 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 Circular Linked List diff --git a/Circular Linked List b/Circular Linked List new file mode 100644 index 0000000..d6ffdfc --- /dev/null +++ b/Circular Linked List @@ -0,0 +1,115 @@ +#include +#include +#include +#include + +struct node { + int data; + int key; + + struct node *next; +}; + +struct node *head = NULL; +struct node *current = NULL; + +bool isEmpty() { + return head == NULL; +} + +int length() { + int length = 0; + + //if list is empty + if(head == NULL) { + return 0; + } + + current = head->next; + + while(current != head) { + length++; + current = current->next; + } + + return length; +} + +//insert link at the first location +void insertFirst(int key, int data) { + + //create a link + struct node *link = (struct node*) malloc(sizeof(struct node)); + link->key = key; + link->data = data; + + if (isEmpty()) { + head = link; + head->next = head; + } else { + //point it to old first node + link->next = head; + + //point first to new first node + head = link; + } +} + +//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; +} + +//display the list +void printList() { + + struct node *ptr = head; + printf("\n[ "); + + //start from the beginning + if(head != NULL) { + + while(ptr->next != ptr) { + printf("(%d,%d) ",ptr->key,ptr->data); + ptr = ptr->next; + } + } + + printf(" ]"); +} + +void main() { + insertFirst(1,10); + insertFirst(2,20); + insertFirst(3,30); + insertFirst(4,1); + insertFirst(5,40); + insertFirst(6,56); + + printf("Original List: "); + + //print list + printList(); + + while(!isEmpty()) { + struct node *temp = deleteFirst(); + printf("\nDeleted value:"); + printf("(%d,%d) ",temp->key,temp->data); + } + + printf("\nList after deleting all items: "); + printList(); +}