└── linked list /linked list: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | struct Node { 4 | int data; 5 | struct Node* next; 6 | }; 7 | typedef struct Node node; 8 | node* head = NULL; 9 | void insert(int d) { // d = 30 10 | node* newNode = (node*)malloc(sizeof(node)); 11 | newNode->data = d; 12 | newNode->next = NULL; 13 | 14 | if(head==NULL) { 15 | head = newNode; 16 | } 17 | else { 18 | node* temp = head; 19 | while(temp->next!=NULL) { 20 | temp = temp->next; 21 | } 22 | temp->next = newNode; 23 | } 24 | } 25 | void insertbeg(int d) { // d = 40 26 | node* newNode = (node*)malloc(sizeof(node)); 27 | newNode->data = d; 28 | newNode->next = head; 29 | 30 | head = newNode; 31 | } 32 | void insertafter(int x, int d) { // x = 20, d = 50 33 | node* newNode = (node*)malloc(sizeof(node)); 34 | newNode->data = d; 35 | newNode->next = NULL; 36 | 37 | node* temp = head; 38 | while(temp->data != x) { 39 | temp = temp->next; 40 | } 41 | newNode->next = temp->next; 42 | temp->next = newNode; 43 | } 44 | void insertbefore(int x, int d) { 45 | node* newNode = (node*)malloc(sizeof(node)); 46 | newNode->data = d; 47 | newNode->next = NULL; 48 | 49 | node* prev = NULL; 50 | node* temp = head; 51 | 52 | while(temp->data!=x) { 53 | prev = temp; 54 | temp = temp->next; 55 | } 56 | 57 | newNode->next = temp; 58 | prev->next = newNode; 59 | } 60 | void deletebeg() { 61 | if(head==NULL) { 62 | printf("\nList is Empty"); 63 | return; 64 | } 65 | node* temp = head; 66 | head = temp->next; 67 | free(temp); 68 | } 69 | void deleteEnd() { 70 | if(head==NULL) { 71 | printf("\nList is Empty"); 72 | return; 73 | } 74 | if(head->next == NULL) { 75 | free(head); 76 | head = NULL; 77 | return; 78 | } 79 | 80 | node* temp = head; 81 | node* prev = NULL; 82 | 83 | while(temp->next != NULL) { 84 | prev = temp; 85 | temp = temp->next; 86 | } 87 | free(temp); 88 | prev->next = NULL; 89 | } 90 | void deletePosition(int Position) { 91 | if(head==NULL) { 92 | printf("\nList is Empty"); 93 | } 94 | if(Position == 0) { 95 | deletebeg(); 96 | return; 97 | } 98 | 99 | node* temp = head; 100 | node* prev = NULL; 101 | int CurrentPosition = 0; 102 | 103 | while(temp!=NULL && CurrentPosition != Position) { 104 | prev = temp; 105 | temp = temp->next; 106 | CurrentPosition++; 107 | } 108 | 109 | if(temp==NULL) { 110 | printf("\nInvalid Position"); 111 | } 112 | prev->next = temp->next; 113 | free(temp); 114 | } 115 | void display() { 116 | node* temp = head; 117 | while(temp!=NULL) { 118 | printf("\nNode = %d", temp->data); 119 | // printf("\nAddress = %d", temp->next); 120 | temp = temp->next; 121 | } 122 | printf("\nNode = NULL"); 123 | } 124 | 125 | int main() { 126 | insert(10); 127 | insert(20); 128 | insert(30); 129 | insertbeg(40); 130 | insertafter(20, 50); 131 | insertbefore(20, 60); 132 | display(); 133 | printf("\n---------------------------"); 134 | deletebeg(); 135 | deleteEnd(); 136 | deletePosition(2); 137 | display(); 138 | 139 | return 0; 140 | } 141 | 142 | --------------------------------------------------------------------------------