使用C语言实现单链表的基本操作

  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 }

 

posted @ 2023-07-03 20:34  nullIsland01  阅读(43)  评论(0)    收藏  举报