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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Hugo_Boss
1 / 1 / 0
Регистрация: 29.01.2013
Сообщений: 46
#1

Удаление нескольких элементов из односвязного списка - C++

22.06.2013, 23:22. Просмотров 1344. Ответов 3
Метки нет (Все метки)

Всем привет!

Собственно, сабж: есть односвязный список с повторяющимися элементами. Мне надо удалить определенные элементы. Есть функция, но она удаляет только первый такой элемент.

Скажите, пожалуйста, как мне реализовать эту затею?

Премного благодарен за помощь.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void deleteElem(int val)
{
  Node *current = head;
  Node *prev = nullptr;
 
  while (current && current->value != val)
    {
      prev = current;
      current = current->next;
    }
 
    if (current)
    {
      if (prev)
      {
        prev->next = current->next;
      }
      else
        head = current->next;
      delete current;
 
  }
Структура одного элемента:

C++
1
2
3
4
5
struct Node 
  {
    int value;
    Node *next;
  }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2013, 23:22     Удаление нескольких элементов из односвязного списка
Посмотрите здесь:

Удаление элементов из односвязного списка списка - C++
Привет всем знатокам, суровым программистам и профессионалам своего дела. Засел за реализацией списка и что то пока не могу понять. Задача...

Удаление элемента из односвязного списка - C++
Ребят, что я не так делаю? Элемент не удаляется, а заменяется на число 26. Вот код: #include <iostream> #include <string> #include...

Удаление элемента из односвязного списка - C++
Здравствуйте, мне надо, чтобы элементы у которых средний балл был ниже были удалены в односвязном списке. Подскажите, как это сделать....

Удаление значения из односвязного списка - C++
добрый день можете подсказать, пытаюсь удалить элемент односвязного списка, только постояно выдает почему-то ошибку, вообще у меня там...

Удаление элемента односвязного списка - C++
Здравствуйте. Написал вот такой код. В программе происходит создание списка, вывод его на экран, а так же удаление первого элемента,...

Удаление из односвязного списка заданного элемента - C++
Структура содержит название, цену, количество товара. Удалить из списка заданный товар.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ksandro
31 / 31 / 1
Регистрация: 15.04.2011
Сообщений: 81
23.06.2013, 00:57     Удаление нескольких элементов из односвязного списка #2
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
void deleteElements(int val)
{
    Node *current = head;
    Node *prev = nullptr;
 
    while(current)
    {
        if(current->value == val)
        {
            if(prev)
            {
                prev->next = current->next;
            }
            else
            {
                head = current->next;
            }
            Node tmp = current->next;
            delete current;
            current = tmp;
        }
        else
        {
            prev = current;
            current = current->next
        }
    }
}
вот как-то так.... я не компилировал и не проверял что работает, так что у меня могут быть ошибки....
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,733
23.06.2013, 01:07     Удаление нескольких элементов из односвязного списка #3
Цитата Сообщение от Hugo_Boss Посмотреть сообщение
Мне надо удалить определенные элементы.
технология этого дела проста
допустим нужно удалить пятый элемент
доходим до него с голова
смотрим на что он указывает (на шестой)
идем к четвертому элементу
и подменяем указатель на пятый на указатель на шестой
при этом запоминаем указатель на пятый
все элемента больше нет в списке, но он все еще болтается в памяти
и здесь нам понадобится указатель на пятый(который сохранен) по нему удаляем элемент из памяти

во вставке тоже нет ничего сложного
создаем объект
запоминаем указатель на него
идем до четвертого
считываем на что он указывает
записываем это в только что созданный
а в четвертом в указатель записываем указатель на только что созданный обект
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2013, 07:00     Удаление нескольких элементов из односвязного списка
Еще ссылки по теме:

Удаление первого элемента односвязного списка - C++
не могу понять как удалить первый элемент в односвязном списке. #include <iostream> using namespace std; int a, b, kolvo; struct...

Удаление последнего элемента односвязного списка - C++
как сделать в списке pop_back и полное очищение? struct Node { int value; Node* next; }; struct List { Node...

Удаление первого элемента односвязного списка - C++
Здравствуйте!Написана программа для работы с односвязным списком,все хорошо,но нет удаление первого элемента,удаляет любые,но не первый....

Удаление положительных значений из односвязного списка - C++
Добрый день. Который день мучаюсь с удалением положительных элементов из односвязного списка. Что бы ни пробовал - все не работает. Поискал...

Удаление элемента из односвязного списка, представленного классом - C++
Описание списка class link // один элемент списка { public: char* data; // некоторые данные link* next; // указатель на...

Удаление узла из односвязного списка по заданному параметру - C++
Имеется: программа для добавления данных студента/ов, распечатывание его/их данных. Нужно написать код для удаления узла с данными студента...


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

Или воспользуйтесь поиском по форуму:
Hugo_Boss
1 / 1 / 0
Регистрация: 29.01.2013
Сообщений: 46
23.06.2013, 07:00  [ТС]     Удаление нескольких элементов из односвязного списка #4
@ksandro, Круто, спасибо - я разобрался, в чем дело.
Из ошибок: в одном месте пропущена ;.

И здесь:
Цитата Сообщение от ksandro Посмотреть сообщение
C++
1
Node tmp = current->next;
Надо, естественно, так:
C++
1
Node *tmp = current->next;
@ValeryS, Да я в принципе понимаю технологии что вставки, что удаления - просто до меня не доходило, как надо удалять несколько элементов из списка за 1 проход.
Yandex
Объявления
23.06.2013, 07:00     Удаление нескольких элементов из односвязного списка
Ответ Создать тему
Опции темы

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