Войти

Показать полную графическую версию : Удалить все наибольшие элементы, кроме первого, в списке целых чисел


artyomartemyev96
01-03-2015, 18:08
#include <stdio.h>
#include<locale.h>
#include <conio.h>
#include <time.h>
#include<stdlib.h>
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;
}

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




© OSzone.net 2001-2012