这篇文章上次修改于 537 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
这个则是一个 C 语言的期中作业
由于是作业,也是按照要求顺便写了出来,大佬们勿喷!
代码实现
#include <stdio.h>
#include <stdlib.h>
typedef struct Node // 定义一个结构体
{
float data;
struct Node *next;
} Node;
Node *Chuangzao_LinkedList() // 创建一个链表
{
Node *head = NULL; // 定义头指针
Node *tail = NULL; // 定义尾指针
/*并初始为null*/
float Yuan_Su; // 定义元素
printf("请输入多个整数(用空格分开,并以-1结束):\n");
while (1)
{
scanf("%f", &Yuan_Su); // 循环输入元素
if (Yuan_Su == -1)
{
break; // 输入-1,退出循环
}
Node *newNode = (Node *)malloc(sizeof(Node)); // 创建新结点,用malloc分配内存
newNode->data = Yuan_Su;
newNode->next = NULL;
if (head == NULL) // 如果为头为空
{
head = newNode; // 指向新结点
tail = newNode;
}
else
{
tail->next = newNode; // 插入链表尾部
tail = newNode; // 更新指针
}
}
return head;
}
float Shanchu_MaxNode(Node **head) // 定义删除链表最大值的函数
{
if (*head == NULL)
{
printf("链表为空!");
return -1;
}
Node *Dang_qian = *head; // 当前结点为头
Node *maxNode = NULL; // 最大结点和当前结点前一个为空
Node *Qian_yige = NULL;
float maxValue = Dang_qian->data;
while (Dang_qian != NULL && Dang_qian->next != NULL)
{
if (Dang_qian->next->data > maxValue)
{
maxValue = Dang_qian->next->data;
maxNode = Dang_qian;
Qian_yige = maxNode;
}
else
{
Dang_qian = Dang_qian->next;
}
}
if (maxNode == NULL)
{
maxNode = *head;
*head = (*head)->next;
}
else
{
maxNode = maxNode->next;
Qian_yige->next = maxNode->next;
}
float maxData = maxNode->data;
free(maxNode);
return maxData;
}
void printLinkedList(Node *head)
{
if (head == NULL)
{
return;
}
printLinkedList(head->next);
printf(" %.2f->", head->data);
}
int main()
{
Node *head = Chuangzao_LinkedList();
float maxData = Shanchu_MaxNode(&head);
printf("删除的最大值为:%.2f\n", maxData);
printf("删除链表最大的值后,链表的值如下:\n");
printLinkedList(head);
printf("\n");
system("pause"); // vscode中加入可以使cmd可以保留在屏幕上,删除则会一闪而过
return 0;
}