#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
typedef struct LinkedList {
Node* head;
} LinkedList;
void init_list(LinkedList* list, int data[], int size) {
list->head = (Node*)malloc(sizeof(Node));
Node* p = list->head;
for (int i = 0; i < size; i++) {
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = data[i];
new_node->next = NULL;
p->next = new_node;
p = p->next;
}
}
int get_value(LinkedList* list, int index) {
Node* p = list->head->next;
int i = 0;
while (p && i < index) {
p = p->next;
i++;
}
if (!p) {
printf("Index out of range\n");
return -1;
}
return p->data;
}
int find_value(LinkedList* list, int value) {
Node* p = list->head->next;
int index = 0;
while (p) {
if (p->data == value) {
return index;
}
p = p->next;
index++;
}
return -1;
}
void insert_value(LinkedList* list, int index, int value) {
Node* p = list->head;
int i = 0;
while (p && i < index) {
p = p->next;
i++;
}
if (!p) {
printf("Index out of range\n");
return;
}
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = value;
new_node->next = p->next;
p->next = new_node;
}
void delete_value(LinkedList* list, int value) {
Node* p = list->head;
while (p->next) {
if (p->next->data == value) {
Node* temp = p->next;
p->next = p->next->next;
free(temp);
return;
}
p = p->next;
}
printf("Value not found\n");
}
int main() {
int data[] = {1, 2, 3, 4, 5};
int size = sizeof(data) / sizeof(data[0]);
LinkedList list;
init_list(&list, data, size);
printf("Value at index 2: %d\n", get_value(&list, 2));
printf("Index of value 3: %d\n", find_value(&list, 3));
insert_value(&list, 2, 10);
printf("After inserting 10 at index 2: ");
for (int i = 0; i < size + 1; i++) {
printf("%d ", get_value(&list, i));
}
printf("\n");
delete_value(&list, 3);
printf("After deleting value 3: ");
for (int i = 0; i < size; i++) {
printf("%d ", get_value(&list, i));
}
printf("\n");
return 0;
}