Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 46

Не работает метод удаления элементов двухсвязного списка

26.02.2020, 10:03. Показов 1235. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
задание удалить все чётные эл двухсвязного списка. не работает функция удаления chek. помогите разобраться что не так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <ctime>
#include <iostream>
using namespace std;
 
struct list
{
    int field; // поле данных
    struct list* next; // указатель на следующий элемент
    struct list* prev; // указатель на предыдущий элемент
};
list *create(list *lst) {
    list* tmp;
    tmp = new list; //новый узел
    tmp->field = 1 + rand() % 100;
    tmp->next = NULL;
    tmp->prev = lst;
    lst->next = tmp;
    return tmp;
}
list* init()  {
    list* lst;
    lst = new list;
    //srand(time(0));
    lst->field = 1 + rand() % 100;
    lst->next = NULL; // указатель на следующий узел
    lst->prev = NULL; // указатель на предыдущий узел
    return(lst);
}
void show(list *first) {
    list* tmp = first;
    while (tmp) {
        cout << tmp->field << ' ';
        tmp = tmp->next;
    }
}
list* chek(list* first) {
    list* prev, * next; 
    if (first->field % 2 == 0) {
        prev = first->prev;
        next = first->next;
        if (prev) prev->next = first->next;
        if (next) next->prev = first->prev;
        delete first;
        return next;
    }
    else return first->next;
}
int main()
{
    setlocale(LC_ALL, "RU");
    list* lst, *lstTop; int m; cout << "Введите кол узлов: "; cin >> m;
    lst = init(); lstTop = lst;
    for (int i = 1; i < m; i++) lst = create(lst);
    show(lstTop);
    while (lstTop)  lstTop = chek(lstTop); 
    show(lstTop);
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.02.2020, 10:03
Ответы с готовыми решениями:

Не работает процедура удаления элементов из списка
Вообщем, дан двунаправленный список. Задача состоит в том чтобы из группы подряд стоящих элементов оставить по одному. Пытался сделать...

Не работает процедура удаления элементов со списка
Здравствуйте, в программе реализуется удаления элементов списка с непарными номерами. Помогите пожалуйста исправить ошибки в коде и...

Добавление элементов в любое место двухсвязного списка
Есть двухсвязный список, В КОТОРОМ ЕЛЕМЕНТЫ ДОБАВЛЯЮТСЯ В КОНЕЦ. Как сделать что б можно было добавлять элементы в начало и в середину. ...

3
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
26.02.2020, 10:36
Цитата Сообщение от mascrpone Посмотреть сообщение
задание удалить все чётные эл двухсвязного списка. не работает функция удаления chek. помогите разобраться что не так?
После цикла
C++
1
while (lstTop)  lstTop = chek(lstTop);
lstTop будет всегда равен nullptr, т.е. ты потом пытаешься сделать show(nullptr);
0
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 46
26.02.2020, 10:49  [ТС]
так а почему, что надо исправить?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
26.02.2020, 10:53
Лучший ответ Сообщение было отмечено mascrpone как решение

Решение

Цитата Сообщение от mascrpone Посмотреть сообщение
так а почему, что надо исправить?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
list* chek(list *&head, list* first) 
{
    list* prev, *next;
    if (first->field % 2 == 0) {
        
        prev = first->prev;
        next = first->next;
        if (prev) prev->next = first->next;
        if (next) next->prev = first->prev;
        if (head == first)
            head = next;
        
        delete first;
        return next;
    }
    else return first->next;
}
Добавлено через 50 секунд
C++
1
2
for (auto *p = lstTop; p; )  
    p = chek(lstTop, p);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.02.2020, 10:53
Помогаю со студенческими работами здесь

Реализуйте метод удаления объекта из списка linked list
Реализуйте метод удаления объекта из списка linked list у каждого объекта есть переменная которая ссылается на объект того же типа ...

Реализация двухсвязного списка
Здравствуйте! Подскажите, как правильно начать разрабатывать написание кода для двухсвязный список Список должен поддерживать следующие...

Создание двухсвязного списка
Есть задание: Реализовать двухсвязный список. Каждый элемент списка может содержать один объект. Объект может быть трех типов:...

Нужно исправить метод удаления узла из односвязного списка по параметру
Помогите,пожалуйста!Срочно надо. Есть метод,который должен удалять узел в списке по указываемому параметру,в данном случае,параметр...

Переписать с С# в С++. Реализация двухсвязного списка
Здраствуйте, помогите пожалуйста переписать код на С++ Вот сам код: using System; using System.Collections.Generic; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru