实现以下对单链表的操作,要求单链表一次遍历效率(数据结构c++)

double averageExceptMaxMin(SinglyList &list) ​//去掉最高分和最低分,再求平均值

基本思路就是,遍历一遍,然后累加每个data值到sum_num上,然后比较每个值和最大值和最小值,如果比最大值大,那么更新最大值,
比最小值小,那么更新最小值,并且记录一共有几个结点,最后return的时候减去最大最小值,数量也减2

 double averageExceptMaxMin(LinkList &list)
{
    LinkList p = list->next;
    double max_num, min_num, sum_num = 0.0;//分别记录最大值,最小值,总数
    max_num = p->data;//将第一个结点的值作为最开始的最大值
    min_num = p->data;//将第一个结点的值作为最开始的最小值
    int i = 0;//记录结点个数
    while (p != NULL)
    {
        sum_num += p->data; //累加data值
        if(p->data > max_num)//比较是否大于最大值
            max_num = p->data;
        else if(p->data < min_num)//比较是否小于最大值
            min_num = p->data;
        p = p->next;//移到下一个结点
        i++;//结点个数+1
    }
    //减去最大值和最小值,个数也要减2
    return (sum_num - min_num - max_num) / (i - 2);
}

图片说明

思路不错,楼上,就是查找然后叠加,最后求值