290 lines
		
	
	
	
		
			6.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			290 lines
		
	
	
	
		
			6.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| 
 | |
| typedef struct Node
 | |
| {
 | |
|     int data;
 | |
|     struct Node *next;
 | |
| } Node;
 | |
| 
 | |
| // case 1
 | |
| Node *insBef(Node *head, int newData, int targetData)
 | |
| {
 | |
|     Node *temp = (Node *)malloc(sizeof(Node));
 | |
|     temp->data = newData;
 | |
|     temp->next = NULL;
 | |
| 
 | |
|     if (head == NULL)
 | |
|     {
 | |
|         printf("List is empty. Inserting as the first element.\n");
 | |
|         return temp;
 | |
|     }
 | |
| 
 | |
|     if (head->data == targetData)
 | |
|     {
 | |
|         temp->next = head;
 | |
|         return temp;
 | |
|     }
 | |
| 
 | |
|     Node *current = head;
 | |
|     Node *prev = NULL;
 | |
| 
 | |
|     while (current != NULL && current->data != targetData)
 | |
|     {
 | |
|         prev = current;
 | |
|         current = current->next;
 | |
|     }
 | |
| 
 | |
|     if (current == NULL)
 | |
|     {
 | |
|         printf("Target element not found. Insertion failed.\n");
 | |
|         free(temp);
 | |
|         return head;
 | |
|     }
 | |
| 
 | |
|     prev->next = temp;
 | |
|     temp->next = current;
 | |
| 
 | |
|     printf("Element inserted successfully.\n");
 | |
|     return head;
 | |
| }
 | |
| 
 | |
| // case 2
 | |
| Node *insAft(Node *head, int newData, int targetData)
 | |
| {
 | |
|     Node *temp = (Node *)malloc(sizeof(Node));
 | |
|     temp->data = newData;
 | |
|     temp->next = NULL;
 | |
| 
 | |
|     if (head == NULL)
 | |
|     {
 | |
|         printf("List is empty. Inserting as the first element.\n");
 | |
|         return temp;
 | |
|     }
 | |
| 
 | |
|     Node *current = head;
 | |
| 
 | |
|     while (current != NULL && current->data != targetData)
 | |
|     {
 | |
|         current = current->next;
 | |
|     }
 | |
| 
 | |
|     if (current == NULL)
 | |
|     {
 | |
|         printf("Target element not found. Insertion failed.\n");
 | |
|         free(temp);
 | |
|         return head;
 | |
|     }
 | |
| 
 | |
|     temp->next = current->next;
 | |
|     current->next = temp;
 | |
| 
 | |
|     printf("Element inserted successfully.\n");
 | |
|     return head;
 | |
| }
 | |
| 
 | |
| // case 3
 | |
| Node *delEle(Node *head, int data)
 | |
| {
 | |
|     if (head == NULL)
 | |
|     {
 | |
|         printf("Linked list is empty.\n");
 | |
|         return NULL;
 | |
|     }
 | |
|     Node *current = head;
 | |
|     Node *prev = NULL;
 | |
|     while (current != NULL && current->data != data)
 | |
|     {
 | |
|         prev = current;
 | |
|         current = current->next;
 | |
|     }
 | |
|     if (current == NULL)
 | |
|     {
 | |
|         printf("Element not found in the linked list.\n");
 | |
|         return head;
 | |
|     }
 | |
|     if (prev == NULL)
 | |
|     {
 | |
|         head = current->next;
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         prev->next = current->next;
 | |
|     }
 | |
|     free(current);
 | |
|     printf("Element deleted successfully.\n");
 | |
|     return head;
 | |
| }
 | |
| 
 | |
| // case 4
 | |
| void dispList(Node *head)
 | |
| {
 | |
|     if (head == NULL)
 | |
|     {
 | |
|         printf("Linked list is empty.\n");
 | |
|         return;
 | |
|     }
 | |
|     Node *current = head;
 | |
|     printf("Linked list elements: ");
 | |
|     while (current != NULL)
 | |
|     {
 | |
|         printf("%d ", current->data);
 | |
|         current = current->next;
 | |
|     }
 | |
|     printf("\n");
 | |
| }
 | |
| 
 | |
| // case 5
 | |
| Node *revList(Node *head)
 | |
| {
 | |
|     Node *prev = NULL;
 | |
|     Node *current = head;
 | |
|     Node *next = NULL;
 | |
| 
 | |
|     while (current != NULL)
 | |
|     {
 | |
|         next = current->next;
 | |
|         current->next = prev;
 | |
|         prev = current;
 | |
|         current = next;
 | |
|     }
 | |
| 
 | |
|     head = prev;
 | |
|     printf("List reversed successfully.\n");
 | |
|     return head;
 | |
| }
 | |
| 
 | |
| // case 6
 | |
| Node *sortList(Node *head)
 | |
| {
 | |
|     if (head == NULL || head->next == NULL)
 | |
|         return head;
 | |
| 
 | |
|     Node *current, *index;
 | |
|     int temp;
 | |
| 
 | |
|     for (current = head; current->next != NULL; current = current->next)
 | |
|     {
 | |
|         for (index = current->next; index != NULL; index = index->next)
 | |
|         {
 | |
|             if (current->data > index->data)
 | |
|             {
 | |
|                 temp = current->data;
 | |
|                 current->data = index->data;
 | |
|                 index->data = temp;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     printf("List sorted successfully.\n");
 | |
|     return head;
 | |
| }
 | |
| 
 | |
| // case 7
 | |
| Node *delAltNode(Node *head)
 | |
| {
 | |
|     if (head == NULL || head->next == NULL)
 | |
|         return head;
 | |
| 
 | |
|     Node *current = head;
 | |
|     Node *temp;
 | |
| 
 | |
|     while (current != NULL && current->next != NULL)
 | |
|     {
 | |
|         temp = current->next;
 | |
|         current->next = temp->next;
 | |
|         free(temp);
 | |
|         current = current->next;
 | |
|     }
 | |
| 
 | |
|     printf("Alternate nodes deleted successfully.\n");
 | |
|     return head;
 | |
| }
 | |
| 
 | |
| // case 8
 | |
| Node *enterSortList(Node *head, int data)
 | |
| {
 | |
|     Node *temp = (Node *)malloc(sizeof(Node));
 | |
|     temp->data = data;
 | |
|     temp->next = NULL;
 | |
| 
 | |
|     if (head == NULL || head->data >= temp->data)
 | |
|     {
 | |
|         temp->next = head;
 | |
|         head = temp;
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         Node *current = head;
 | |
|         while (current->next != NULL && current->next->data < temp->data)
 | |
|         {
 | |
|             current = current->next;
 | |
|         }
 | |
|         temp->next = current->next;
 | |
|         current->next = temp;
 | |
|     }
 | |
| 
 | |
|     printf("Element inserted in sorted list successfully.\n");
 | |
|     return head;
 | |
| }
 | |
| 
 | |
| int main()
 | |
| {
 | |
|     Node *head = NULL;
 | |
|     int choice, data, data1;
 | |
|     while (1)
 | |
|     {
 | |
|         printf("Choose the Linked List Operation you would like to perform:\n");
 | |
|         printf("1. Insert element BEFORE another element\n2. Insert element AFTER another element\n3. Delete a given element from the list\n4. Traverse the list\n5. Reverse the list\n6. Sort the list\n7. Delete every alternate node in the list\n8. Insert an element in a sorted list\n");
 | |
|         scanf("%d", &choice);
 | |
| 
 | |
|         switch (choice)
 | |
|         {
 | |
|         case 1:
 | |
|             printf("Enter the value for the latest element: ");
 | |
|             scanf("%d", &data);
 | |
|             printf("Enter the number BEFORE which you would like to insert it: ");
 | |
|             scanf("%d", &data1);
 | |
|             head = insBef(head, data, data1);
 | |
|             break;
 | |
|         case 2:
 | |
|             printf("Enter the value for the latest element: ");
 | |
|             scanf("%d", &data);
 | |
|             printf("Enter the number AFTER which you would like to insert it: ");
 | |
|             scanf("%d", &data1);
 | |
|             head = insAft(head, data, data1);
 | |
|             break;
 | |
|         case 3:
 | |
|             printf("Enter the element you want to delete: ");
 | |
|             scanf("%d", &data);
 | |
|             head = delEle(head, data);
 | |
|             break;
 | |
|         case 4:
 | |
|             printf("List traversal\n");
 | |
|             dispList(head);
 | |
|             break;
 | |
|         case 5:
 | |
|             head = revList(head);
 | |
|             printf("The reversed link list is: ");
 | |
|             dispList(head);
 | |
|             break;
 | |
|         case 6:
 | |
|             head = sortList(head);
 | |
|             printf("The sorted list is: ");
 | |
|             dispList(head);
 | |
|             break;
 | |
|         case 7:
 | |
|             head = delAltNode(head);
 | |
|             printf("The list after deleting every alternate node is: ");
 | |
|             dispList(head);
 | |
|             break;
 | |
|         case 8:
 | |
|             printf("Enter the element you want to insert: ");
 | |
|             scanf("%d", &data);
 | |
|             head = enterSortList(head, data);
 | |
|             printf("The updated sorted list is: ");
 | |
|             dispList(head);
 | |
|             break;
 | |
|         }
 | |
|     }
 | |
| }
 | 
