top of page

Circular Linked List



A circular linked list is a type of linked list where the last node in the list points back to the first node, forming a circle.


#include <stdio.h>

#include <stdlib.h>


struct Node {

int data;

struct Node* next;

};


struct CircularLinkedList {

struct Node* head;

int count;

};


struct Node* create_node(int data) {

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

node->data = data;

node->next = NULL;

return node;

}


struct CircularLinkedList* create_list() {

struct CircularLinkedList* list = (struct CircularLinkedList*)malloc(sizeof(struct CircularLinkedList));

list->head = NULL;

list->count = 0;

return list;

}


void append(struct CircularLinkedList* list, int data) {

struct Node* node = create_node(data);


if (list->head == NULL) {

list->head = node;

node->next = node; // make the node point to itself

} else {

node->next = list->head->next;

list->head->next = node;

list->head = node;

}


list->count++;

}


int remove_node(struct CircularLinkedList* list, int data) {

if (list->head == NULL) {

return 0;

}


struct Node* current = list->head;

struct Node* prev = NULL;


do {

if (current->data == data) {

if (current == list->head) {

list->head = prev;

}


prev->next = current->next;

free(current);

list->count--;

return 1;

}


prev = current;

current = current->next;

} while (current != list->head->next);


return 0;

}


void print_list(struct CircularLinkedList* list) {

if (list->head == NULL) {

return;

}


struct Node* current = list->head->next;


do {

printf("%d ", current->data);

current = current->next;

} while (current != list->head->next);


printf("\n");

}


int main() {

struct CircularLinkedList* list = create_list();


append(list, 1);

append(list, 2);

append(list, 3);


print_list(list); // output: 1 2 3


remove_node(list, 2);


print_list(list); // output: 1 3


return 0;

}


0 views0 comments

Recent Posts

See All

Stack Using Queue

A stack can be implemented using two queues in C. The basic idea is to use one queue for enqueue operations and another for dequeue operations. When an element is pushed onto the stack, it is enqueued

bottom of page