diff --git a/algorithms/C/linked-lists/circular_linkedlist.c b/algorithms/C/linked-lists/circular_linkedlist.c new file mode 100644 index 00000000..2b1d086a --- /dev/null +++ b/algorithms/C/linked-lists/circular_linkedlist.c @@ -0,0 +1,64 @@ +#include +#include + +/* structure node Created */ +struct Node +{ + int data; + struct Node *next; +}; + +/* insert the node at the stating of a Circular +linked list */ +void push(struct Node **head_ref, int data) +{ + struct Node *ptr1 = (struct Node *)malloc(sizeof(struct Node)); + struct Node *temp = *head_ref; + ptr1->data = data; + ptr1->next = *head_ref; + + /* If linked list is not NULL then set the next of last node */ + if (*head_ref != NULL) + { + while (temp->next != *head_ref) + temp = temp->next; + temp->next = ptr1; + } + else + ptr1->next = ptr1; /*For the first node */ + + *head_ref = ptr1; +} + +/* Function to print nodes in a given Circular linked list */ +void printList(struct Node *head) +{ + struct Node *temp = head; + if (head != NULL) + { + do + { + printf("%d ", temp->data); + temp = temp->next; + } while (temp != head); + } +} + +/* Driver program to test above functions */ +int main() +{ + /* Initialize lists as empty */ + struct Node *head = NULL; + + /* Created linked list will be 11->2->56->12 */ + push(&head, 12); + push(&head, 56); + push(&head, 2); + push(&head, 11); + + printf(" Contents of Circular Linked List \n "); + printList(head); + + getchar(); + return 0; +}