Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

22.06.2013, 23:22. Просмотров 1458. Ответов 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;
  }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2013, 23:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление нескольких элементов из односвязного списка (C++):

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

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

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

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

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

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

3
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
        }
    }
}
вот как-то так.... я не компилировал и не проверял что работает, так что у меня могут быть ошибки....
1
ValeryS
Модератор
6753 / 5162 / 493
Регистрация: 14.02.2011
Сообщений: 17,344
23.06.2013, 01:07 #3
Цитата Сообщение от Hugo_Boss Посмотреть сообщение
Мне надо удалить определенные элементы.
технология этого дела проста
допустим нужно удалить пятый элемент
доходим до него с голова
смотрим на что он указывает (на шестой)
идем к четвертому элементу
и подменяем указатель на пятый на указатель на шестой
при этом запоминаем указатель на пятый
все элемента больше нет в списке, но он все еще болтается в памяти
и здесь нам понадобится указатель на пятый(который сохранен) по нему удаляем элемент из памяти

во вставке тоже нет ничего сложного
создаем объект
запоминаем указатель на него
идем до четвертого
считываем на что он указывает
записываем это в только что созданный
а в четвертом в указатель записываем указатель на только что созданный обект
1
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 проход.
0
23.06.2013, 07:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2013, 07:00
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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