代码实现
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 typedef struct Node // 定义一个结构体
5 {
6 float data;
7 struct Node *next;
8 } Node;
9
10 Node *Chuangzao_LinkedList() // 创建一个链表
11 {
12 Node *head = NULL; // 定义头指针
13 Node *tail = NULL; // 定义尾指针
14 /*并初始为null*/
15 float Yuan_Su; // 定义元素
16 printf("请输入多个整数(用空格分开,并以-1结束):\n");
17 while (1)
18 {
19 scanf("%f", &Yuan_Su); // 循环输入元素
20
21 if (Yuan_Su == -1)
22 {
23 break; // 输入-1,退出循环
24 }
25
26 Node *newNode = (Node *)malloc(sizeof(Node)); // 创建新结点,用malloc分配内存
27 newNode->data = Yuan_Su;
28 newNode->next = NULL;
29
30 if (head == NULL) // 如果为头为空
31 {
32 head = newNode; // 指向新结点
33 tail = newNode;
34 }
35 else
36 {
37 tail->next = newNode; // 插入链表尾部
38 tail = newNode; // 更新指针
39 }
40 }
41
42 return head;
43 }
44
45 float Shanchu_MaxNode(Node **head) // 定义删除链表最大值的函数
46 {
47 if (*head == NULL)
48 {
49 printf("链表为空!");
50 return -1;
51 }
52
53 Node *Dang_qian = *head; // 当前结点为头
54 Node *maxNode = NULL; // 最大结点和当前结点前一个为空
55 Node *Qian_yige = NULL;
56 float maxValue = Dang_qian->data;
57
58 while (Dang_qian != NULL && Dang_qian->next != NULL)
59 {
60 if (Dang_qian->next->data > maxValue)
61 {
62 maxValue = Dang_qian->next->data;
63 maxNode = Dang_qian;
64 Qian_yige = maxNode;
65 }
66 else
67 {
68 Dang_qian = Dang_qian->next;
69 }
70 }
71
72 if (maxNode == NULL)
73 {
74 maxNode = *head;
75 *head = (*head)->next;
76 }
77 else
78 {
79 maxNode = maxNode->next;
80 Qian_yige->next = maxNode->next;
81 }
82
83 float maxData = maxNode->data;
84 free(maxNode);
85 return maxData;
86 }
87
88 void printLinkedList(Node *head)
89 {
90 if (head == NULL)
91 {
92 return;
93 }
94 printLinkedList(head->next);
95 printf(" %.2f->", head->data);
96 }
97
98 int main()
99 {
100 Node *head = Chuangzao_LinkedList();
101 float maxData = Shanchu_MaxNode(&head);
102 printf("删除的最大值为:%.2f\n", maxData);
103 printf("删除链表最大的值后,链表的值如下:\n");
104 printLinkedList(head);
105 printf("\n");
106 system("pause"); // vscode中加入可以使cmd可以保留在屏幕上,删除则会一闪而过
107 return 0;
108 }
测试结果
