1 #include <stdio.h>
2 #include <stdlib.h>
3
4 typedef struct Node {
5 int data;
6 struct Node* next;
7 } Node;
8
9 void insertAtBeginning(Node** head, int data) {
10 Node* newNode = (Node*)malloc(sizeof(Node));
11 newNode->data = data;
12 newNode->next = *head;
13 *head = newNode;
14 }
15
16 void insertAtEnd(Node** head, int data) {
17 Node* newNode = (Node*)malloc(sizeof(Node));
18 newNode->data = data;
19 newNode->next = NULL;
20
21 if (*head == NULL) {
22 *head = newNode;
23 return;
24 }
25
26 Node* current = *head;
27 while (current->next != NULL) {
28 current = current->next;
29 }
30
31 current->next = newNode;
32 }
33
34 void deleteAtBeginning(Node** head) {
35 if (*head == NULL) {
36 printf("List is empty\n");
37 return;
38 }
39
40 Node* temp = *head;
41 *head = (*head)->next;
42 free(temp);
43 }
44
45 void deleteAtEnd(Node** head) {
46 if (*head == NULL) {
47 printf("List is empty\n");
48 return;
49 }
50
51 if ((*head)->next == NULL) {
52 free(*head);
53 *head = NULL;
54 return;
55 }
56
57 Node* current = *head;
58 Node* previous;
59 while (current->next != NULL) {
60 previous = current;
61 current = current->next;
62 }
63 previous->next = NULL;
64 free(current);
65 }
66
67 void display(Node* head) {
68 if (head == NULL) {
69 printf("List is empty\n");
70 return;
71 }
72
73 Node* current = head;
74 while (current != NULL) {
75 printf("%d ", current->data);
76 current = current->next;
77 }
78 printf("\n");
79 }
80
81 int main() {
82 Node* head = NULL;
83 int choice, item;
84
85 while (1) {
86 printf("1. Insert at beginning\n");
87 printf("2. Insert at end\n");
88 printf("3. Delete at beginning\n");
89 printf("4. Delete at end\n");
90 printf("5. Display\n");
91 printf("6. Exit\n");
92
93 printf("Enter your choice: ");
94 scanf("%d", &choice);
95
96 switch (choice) {
97 case 1:
98 printf("Enter the element to be inserted: ");
99 scanf("%d", &item);
100 insertAtBeginning(&head, item);
101 break;
102 case 2:
103 printf("Enter the element to be inserted: ");
104 scanf("%d", &item);
105 insertAtEnd(&head, item);
106 break;
107 case 3:
108 deleteAtBeginning(&head);
109 break;
110 case 4:
111 deleteAtEnd(&head);
112 break;
113 case 5:
114 display(head);
115 break;
116 case 6:
117 exit(0);
118 default:
119 printf("Invalid choice\n");
120 break;
121 }
122 }
123
124 return 0;
125 }