Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Malin Klein
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 18
#1

Ошибка!!! - C++

07.06.2011, 20:54. Просмотров 286. Ответов 4
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
List DeleteKey(List p, int  x)//удаление по ключу
{
List q, a=p;
/* while(p->key ==  x)
{
q = p;
a=p=p->next;
delete q;
} */
while (p && p->next)
{
if (p->next->key ==  x)
{
List q = p->next;
p->next = q->next;
delete q;
 
}
else p = p->next;
}
return a;
}

Второй цикл неправильно ответ выводит...там пятерок не должно быть при удалении 5. Первый цикл делает удаление а второй нет...надо чтобы во втором проверял первый элемент и удалял. проверьте пожалуйста и исправьте ошибку

Добавлено через 29 минут
Срочнооооооооооооооооооооооооооооооооооо!!!!!!!!!!!!!!!!!!!!!!!!

Добавлено через 1 час 15 минут
=((((((((((((((((((((((

 Комментарий модератора 
Используйте теги форматирования кода!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
07.06.2011, 20:59     Ошибка!!! #2
В цикле удалять первый элемент не получится, изменение головного элемента требует особого отношения. Поэтому иногда вводят ненужный элемент в начало списка.
Да и вообще, чтобы удалить первый элемент функция должна вернуть в вызывающую программу изменённый p. Я правильно понял, что p это указатель на элемент массива и сам указатель передаётся по значению?
Malin Klein
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 18
08.06.2011, 18:37  [ТС]     Ошибка!!! #3
Да,так и есть..

Добавлено через 54 секунды
Меня препод уже достал. я этот линейный односвязный список 4-ую пару сдаю...достал уже.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,989
08.06.2011, 20:51     Ошибка!!! #4
А что возвращает эта функция? Если указатель на начало изменённого списка, то функция действительно может удалить первый элемент, но всё-равно не в цикле, а после, перед возвратом значения.

Добавлено через 6 минут
Как-то так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
List DeleteKey(List p, int  x)//удаление по ключу
{
    List a = p;
    while (p && p->next)
    {
        if (p->next->key ==  x)
        {
            List q = p->next;
            p->next = q->next;
            delete q;
 
        }
        else p = p->next;
    }
    if (a && a->key == x)
    {
        p = a;
        a = a->next;
        delete p;
    }
    return a;
}
Malin Klein
0 / 0 / 0
Регистрация: 10.05.2011
Сообщений: 18
18.06.2011, 18:19  [ТС]     Ошибка!!! #5
Ура,я сдала ее=) сама сделала,спасибо Вам=)
Yandex
Объявления
18.06.2011, 18:19     Ошибка!!!
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru