这篇文章上次修改于 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;
}

测试结果

pic_0a297575.png