Определить количество элементов списка, для которых сумма предыдущих элементов меньше суммы следующих за ним элементов + вывести эти элементы и суммы

Рейтинг: 0Ответов: 1Опубликовано: 20.02.2023

У меня есть структура:

typedef struct SNum
{
    int num;
    SNum * next;
    SNum * prev;

} TSNum;

TSNum * Start;

Я её заполняю рандомными числами с помощью функции. Потом с помощью меню выбираю операцию над этой структурой. Одна из них - определить количество элементов, для которых сумма предыдущих элементов меньше суммы следующих за ним элементов, потом вывести эти элементы и суммы с двух сторон на экран. Я написал эту функцию, но она не работает, сразу вылетает консоль при её вызове. Подскажите пожалуйста, где я допустил ошибку. Вот моя функция:

void sumElemCompar(TSNum * &Start)
{
    int leftSum, rightSum;
    TSNum * wp;
    wp=Start;
    while(wp!=NULL)
    {
        rightSum+=wp->num;
        wp=wp->next;
    }
    wp=Start;

    while(wp!=NULL)
    {
        leftSum+=wp->prev->num;
        rightSum-=wp->num;

        if(leftSum<rightSum)
        {
            cout <<"Элемент "<< wp->num << ": сумма слева - "
                    << leftSum <<"меньше правой - "<< rightSum << endl;
        }

    }
    wp=wp->next;
}

Ответы

▲ 0Принят

Локальные переменные leftSum, rightSum не инициализированы нулями - это нормально?

Вот здесь ошибка:

leftSum+=wp->prev->num;

для первого элемент prev==null

Кажется, достаточно будет эту строку убрать, а после сравнения сделать

 leftSum+=wp->num;