C/C++ - Удалить все наибольшие элементы, кроме первого, в списке целых чисел

Ответить
Аватара пользователя
artyomartemyev96

C/C++ - Удалить все наибольшие элементы, кроме первого, в списке целых чисел

Сообщение artyomartemyev96 »

Код:

Код: Выделить всё

#include 
#include
#include 
#include 
#include
struct number
{
int value;
number *next;
} *phead, *last, *r; //phead - голова списка, last - хвост, r - текущий элемент
int main()
{
setlocale(LC_ALL,"rus");
int count;
srand (time (NULL));//функция генератора случайных чисел
printf("Количество чисел в списке: "); //количество чисел в списке
scanf("%d",&count);
system ("cls");//функция вызова командного процессора для выполнения команды
printf("Список:\n");
for (int i = 0; i < count; i++)
{
if (phead)
{
last->next = new (number);
last = last->next;
last->next = NULL;
}//если список НЕ пустой
else 
{
phead = new (number);
phead->next = NULL;
last = phead;
}//если список пустой
last->value = rand()%11; //случайное число от 0 до 10
}
//Вывод списка на экран список и поиск наибольшего числа
r = phead; 
int max = r->value;
while (r)
{
if (r->value > max) max = r->value;
printf("%d",r->value);
r = r->next;
}
printf("\n\nНаибольший:%d\n", max);
r = phead;
number *next = r->next;
number *tmp;
printf("\nНовый список :\n");
//***************
if (!phead->next->next)
{
if (phead->next->value == max) 
{
delete last;
phead->next = NULL; 
printf("%d",phead->value);
getch(); 
return 0;
}
if (phead->value == max) 
{
delete phead;
phead = last; 
printf("%d",phead->value);
getch(); 
return 0;
}
}//проверяем если в списке два элемента
while (next->next)
{
if (next->value == max) 
{
tmp = next;
r->next = next->next;
delete tmp;
}
r = r->next;
next = r->next;
}//удаляем максимальный элемент из списка
r = phead;
while (r)
{
printf("%d",r->value);
r = r->next;
} //выводим на экран
getch();
return 0;
}

Подскажите,что надо добавить,чтобы первый максимальный элемент не был удален из списка?
Ответить

Вернуться в «Программирование и базы данных»