#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
void insert(Node** head, int data, int position) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
if (position == 1) {
if (*head == NULL) {
*head = newNode;
newNode->next = newNode;
} else {
Node* temp = *head;
while (temp->next != *head) {
temp = temp->next;
}
newNode->next = *head;
temp->next = newNode;
*head = newNode;
}
} else {
Node* temp = *head;
for (int i = 1; i < position - 1 && temp->next != *head; i++) {
temp = temp->next;
}
newNode->next = temp->next;
temp->next = newNode;
}
}
void delete(Node** head, int position) {
if (*head == NULL) return;
Node* temp = *head;
if (position == 1) {
while (temp->next != *head) {
temp = temp->next;
}
Node* toDelete = *head;
if (*head == (*head)->next) {
*head = NULL;
} else {
temp->next = (*head)->next;
*head = (*head)->next;
}
free(toDelete);
} else {
for (int i = 1; i < position - 1 && temp->next != *head; i++) {
temp = temp->next;
}
Node* toDelete = temp->next;
temp->next = toDelete->next;
free(toDelete);
}
}
Node* search(Node* head, int data) {
Node* temp = head;
do {
if (temp->data == data) return temp;
temp = temp->next;
} while (temp != head);
return NULL;
}
void insert(Node** head, int data, int position);
void delete(Node** head, int position);
Node* search(Node* head, int data);
void printList(Node* head) {
if (head == NULL) {
printf("List is empty.\n");
return;
}
Node* temp = head;
do {
printf("%d -> ", temp->data);
temp = temp->next;
} while (temp != head);
printf("(head)\n");
}
int main() {
Node* head = NULL;
insert(&head, 10, 1);
insert(&head, 20, 2);
insert(&head, 30, 3);
insert(&head, 5, 1);
insert(&head, 25, 3);
printf("After insertions: ");
printList(head);
Node* found = search(head, 20);
if (found != NULL) {
printf("Node with data 20 found.\n");
} else {
printf("Node with data 20 not found.\n");
}
delete(&head, 1);
delete(&head, 3);
printf("After deletions: ");
printList(head);
while (head != NULL) {
delete(&head, 1);
}
return 0;
}