diff --git a/LinkedList/LinkedList.c b/LinkedList/LinkedList.c new file mode 100644 index 0000000..7c5654f --- /dev/null +++ b/LinkedList/LinkedList.c @@ -0,0 +1,301 @@ +/* run this program using the console pauser or add your own getch, system("pause") or input loop */ + +#include +#include +#include +#include + +struct node +{ + int data; + struct node *next; +}; +struct node *start = NULL; +struct node *create_ll(struct node *); +struct node *display(struct node *); +struct node *insert_beg(struct node *); +struct node *insert_end(struct node *); +struct node *insert_before(struct node *); +struct node *insert_after(struct node *); +struct node *delete_beg(struct node *); +struct node *delete_end(struct node *); +struct node *delete_node(struct node *); +struct node *delete_after(struct node *); +struct node *delete_list(struct node *); +struct node *sort_list(struct node *); + +int main() +{ + int option; + do + { + printf("\n\n *****MAIN MENU *****"); + printf("\n 1: Create a list"); + printf("\n 2: Display the list"); + printf("\n 3: Add a node at the beginning"); + printf("\n 4: Add a node at the end"); + printf("\n 5: Add a node before a given node"); + printf("\n 6: Add a node after a given node"); + printf("\n 7: Delete a node from the beginning"); + printf("\n 8: Delete a node from the end"); + printf("\n 9: Delete a given node"); + printf("\n 10: Delete a node after a given node"); + printf("\n 11: Delete the entire list"); + printf("\n 12: Sort the list"); + printf("\n 13: EXIT"); + + printf("\n\n Enter your option : "); + scanf("%d", &option); + + switch(option) + { + case 1: start = create_ll(start); + printf("\n LINKED LIST CREATED"); + break; + case 2: start = display(start); + break; + case 3: start = insert_beg(start); + break; + case 4: start = insert_end(start); + break; + case 5: start = insert_before(start); + break; + case 6: start = insert_after(start); + break; + case 7: start = delete_beg(start); + break; + case 8: start = delete_end(start); + break; + case 9: start = delete_node(start); + break; + case 10: start = delete_after(start); + break; + case 11: start = delete_list(start); + printf("\n LINKED LIST DELETED"); + break; + case 12: start = sort_list(start); + break; + } + }while(option !=13); + getch(); + return 0; +} + +struct node *create_ll(struct node *start) /*Create a linked list*/ +{ + struct node *new_node, *ptr; + int num; + printf("\n Enter -1 to end"); + printf("\n Enter the data : "); + scanf("%d", &num); + while(num!=-1) + { + new_node = (struct node*)malloc(sizeof(struct node)); + new_node -> data=num; + if(start==NULL) + { + new_node -> next = NULL; + start = new_node; + } + else + { + ptr=start; + while(ptr->next!=NULL) + ptr=ptr->next; + ptr->next = new_node; + new_node->next=NULL; + } + printf("\n Enter the data : "); + scanf("%d", &num); + } + return start; +} + +struct node *display(struct node *start) +{ + struct node *ptr; + ptr = start; + while(ptr != NULL) + { + printf("\t %d", ptr -> data); + ptr = ptr -> next; + } + return start; +} + +struct node *insert_beg(struct node *start) +{ + struct node *new_node; + int num; + printf("\n Enter the data : "); + scanf("%d", &num); + new_node = (struct node *)malloc(sizeof(struct node)); + new_node -> data = num; + new_node -> next = start; + start = new_node; + return start; +} + +struct node *insert_end(struct node *start) +{ + struct node *ptr, *new_node; + int num; + printf("\n Enter the data : "); + scanf("%d", &num); + new_node = (struct node *)malloc(sizeof(struct node)); + new_node -> data = num; + new_node -> next = NULL; + ptr = start; + while(ptr -> next != NULL) + ptr = ptr -> next; + ptr -> next = new_node; + return start; +} + +struct node *insert_before(struct node *start) +{ + struct node *new_node, *ptr, *preptr; + int num, val; + printf("\n Enter the data : "); + scanf("%d", &num); + printf("\n Enter the value before which the data has to be inserted : "); + scanf("%d", &val); + new_node = (struct node *)malloc(sizeof(struct node)); + new_node -> data = num; + ptr = start; + while(ptr -> data != val) + { + preptr = ptr; + ptr = ptr -> next; + } + preptr -> next = new_node; + new_node -> next = ptr; + return start; +} + +struct node *insert_after(struct node *start) +{ + struct node *new_node, *ptr, *preptr; + int num, val; + printf("\n Enter the data : "); + scanf("%d", &num); + printf("\n Enter the value after which the data has to be inserted : "); + scanf("%d", &val); + new_node = (struct node *)malloc(sizeof(struct node)); + new_node -> data = num; + ptr = start; + preptr = ptr; + while(preptr -> data != val) + { + preptr = ptr; + ptr = ptr -> next; + } + preptr -> next=new_node; + new_node -> next = ptr; + return start; +} + +struct node *delete_beg(struct node *start) +{ + struct node *ptr; + ptr = start; + start = start -> next; + free(ptr); + return start; +} + +struct node *delete_end(struct node *start) +{ + struct node *ptr, *preptr; + ptr = start; + while(ptr -> next != NULL) + { + preptr = ptr; + ptr = ptr -> next; + } + preptr -> next = NULL; + free(ptr); + return start; +} + +struct node *delete_node(struct node *start) +{ + struct node *ptr, *preptr; + int val; + printf("\n Enter the value of the node which has to be deleted : "); + scanf("%d", &val); + ptr = start; + if(ptr -> data == val) + { + start = delete_beg(start); + return start; + } + else + { + while(ptr -> data != val) + { + preptr = ptr; + ptr = ptr -> next; + } + preptr -> next = ptr -> next; + free(ptr); + return start; + } +} + +struct node *delete_after(struct node *start) +{ + struct node *ptr, *preptr; + int val; + printf("\n Enter the value after which the node has to deleted : "); + scanf("%d", &val); + ptr = start; + preptr = ptr; + while(preptr -> data != val) + { + preptr = ptr; + ptr = ptr -> next; + } + preptr -> next=ptr -> next; + free(ptr); + return start; +} + +struct node *delete_list(struct node *start) +{ + struct node *ptr; + if(start!=NULL) + { + ptr=start; + while(ptr != NULL) + { + printf("\n %d is to be deleted next", ptr -> data); + start = delete_beg(ptr); + ptr = start; + } + } + return start; +} + +struct node *sort_list(struct node *start) +{ + struct node *ptr1, *ptr2; + int temp; + ptr1 = start; + while(ptr1 -> next != NULL) + { + ptr2 = ptr1 -> next; + while(ptr2 != NULL) + { + if(ptr1 -> data > ptr2 -> data) + { + temp = ptr1 -> data; + ptr1 -> data = ptr2 -> data; + ptr2 -> data = temp; + } + ptr2 = ptr2 -> next; + } + ptr1 = ptr1 -> next; + } + return start; +} diff --git a/LinkedList/LinkedList_README.md b/LinkedList/LinkedList_README.md new file mode 100644 index 0000000..42e487c --- /dev/null +++ b/LinkedList/LinkedList_README.md @@ -0,0 +1,16 @@ +# Linked List +A linked list is a dynamic data structure where each element (called a node) is made up of two items: the data and a reference (or pointer), which points to the next node. A linked list is a collection of nodes where each node is connected to the next node through a pointer. + +## Operations Performed +* Create a linked list +* Display the linked list +* Add a node at the beginning +* Add a node at the end +* Add a node before a given node +* Add a node after a given node +* Delete a node from the beginning +* Delete a node from the end +* Delete a given node +* Delete a node after a given node +* Delete the entire list +* Sort the list \ No newline at end of file