#include <stdio.h> #include <stdlib.h> typedef struct Node { char data; struct Node * next; } node; node * initLinkedList() { /* initalize the linked list (has head node) */ node * p = (node *)malloc(sizeof(node)); node * temp = p; int i; for (i = 0; i < 4; i++) { node * n = (node *)malloc(sizeof(node)); n->data = i; n->next = NULL; temp->next = n; temp = temp->next; } return p; } node * insertElem(node * p, int elem, int index) { node * temp = p; int i; for (i = 0; i < index; i++) { if (temp == NULL) { printf("Illegal Index"); return p; } temp = temp->next; } node * newNode = (node *)malloc(sizeof(node)); newNode->data = elem; newNode->next = temp->next; temp->next = newNode; return p; } node * deleteElem(node * p, int index) { node * temp = p; int i; for (i = 0; i < index; i++) { temp = temp->next; } node * del = temp->next; temp->next = temp->next->next; free(del); return p; } int searchElem(node * p, int elem) { node * temp = p; int i = 0; while (temp->next) { temp = temp->next; if (temp->data == elem) { return i; // return the index of the element } i++; } return -1; // if not found } node * updateElem(node * p, int index, int newElem) { node * temp = p; int i; for (i = 0; i <= index; i++) { temp = temp->next; } temp->data = newElem; return p; } void display(node * p) { /* display the linked list (has head node) */ node * temp = p; while (temp->next) { temp = temp->next; printf("%d ", temp->data); } printf("\n"); } int main(void) { printf("Linked List: "); node * p = initLinkedList(); display(p); p = insertElem(p, 10, 1); p = insertElem(p, 20, 1); printf("After insertion: "); display(p); p = deleteElem(p, 1); p = deleteElem(p, 1); printf("After deletion: "); display(p); printf("Index of \"2\": %d\n", searchElem(p, 2)); p = updateElem(p, 1, 100); printf("After update: "); display(p); return 0; }