Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 11.02.2015
Сообщений: 47
1

Удаление последнего элемента из списка

10.02.2017, 13:28. Показов 3672. Ответов 3
Метки нет (Все метки)

Добрый день!
Проблема такая, удаляя последний элемент из списка, выдает ошибку
Помогите разобраться!
Спасибо

Код программы


#include <iostream>
#include <time.h>
using namespace std;

//описываем структуру, которая будет элементом списка
struct NODE{
double info; //информационное поле
struct NODE* next; //указатель на следующий элемент списка
};

NODE* first = NULL; //голова списка
NODE* last = NULL; //и хвост

//функция вывода списка
void print_list()
{
NODE* current = first; //становимся на первый элемент
cout << "List elements:\n";
if (!current) cout << "List is empty!\n";
while (current)// Пока указатель на элемент current не равен NULL
{
cout << current->info << " "; //Обрабатываем текущий элемент
current = current->next; //Перемещаемся к следующему элементу
}
}

//функция добавления элемента в конец списка
void add_element()
{

NODE* current = new NODE;//Выделение места в памяти под новый элемент
double x = (rand() % 10) / 10.0;
current->info = x; //Установка значения элемента
current->next = NULL;
//если список пустой
if (!first)
{
first = current;//установить созданный элемент в качестве первого
}
else last->next = current; //установить поле next последнего элемента списка на указатель на новый элемент
last = current; //новый элемент устанавливается в качестве последнего
}

//функция создания списка
void make_list()
{
int n;
cout << "Input count of list's elements:";
cin >> n;
for (int i = 0; i<n; i++)
{
add_element();
}
}

//функция поиска элемента в списке
void findX()
{
if (!first) return;
int i = 1;
NODE* current = first;
double x;
cout << "\nInput X:";
cin >> x;
while (current)
{
if (current->info == x)
{
cout << i << " ";
}
current = current->next;
i++;
}
}

//функция полного удаления списка
void del_list()
{
while (first)
{
NODE* current = first; //Присвоить адрес первого элемента списка вспомогательному указателю
first = current->next;//Указателю на первый элемент присвоить указатель на второй элемент
delete current; //Освободить память, на которую указывает вспомогательный указатель
}
}
void add_element_start(){
NODE* current = new NODE;//Выделение места в памяти под новый элемент
double x = (rand() % 10) / 10.0;
current->info = x; //Установка значения элемента
current->next = NULL;
//если список пустой
if (first == NULL)
current->next=NULL;

else{
current->next = first;
first = current;
}

}
/* удаление последнего элемента*/

void del_element_end()
{
NODE* current = first; //Присвоить адрес первого
while(current->next)
{
current = current->next;
}

delete last;
last = current;
}

//а вот и главная программа
void main()
{
srand(time(NULL));
cout << "\n";
make_list();// создать лист
cout << "\n";
print_list();// печать лист
cout << "\n";
findX();//функция поиска элемента в списке
//del_list();// удалить лист
//make_list();
add_element_start();// добовление элемента в начало списка
//add_element();
//make_list();//функция создания списка
print_list();
del_list();// удалить лист
cout << "\n";
system("pause");//ожидаем...
}


при выполнении del_element_end() последний элемент отображается 2,682254565е +328 и ошибка.
Помогите, что не так?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2017, 13:28
Ответы с готовыми решениями:

Удаление последнего элемента из списка
Есть функция void List::DeleteElement(void) { Element *vsp; if (!begin) { cout &lt;&lt; &quot;Is...

Удаление последнего элемента списка
А вот когда удаляешь последний элемент списка, обязательно в предпоследнем присваивать указатель...

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

Как сделать удаление последнего элемента списка ?
Помогите написать функцию удаления последнего элемента списка.

3
1353 / 514 / 68
Регистрация: 21.07.2015
Сообщений: 1,281
10.02.2017, 13:38 2
Цитата Сообщение от St-137 Посмотреть сообщение
Помогите, что не так?
Как минимум у предыдущего элемента не загуляешь next при удалении. Вероятно, что в коде полно и других ошибок, учись пользоваться отладчиком.
0
0 / 0 / 0
Регистрация: 11.02.2015
Сообщений: 47
10.02.2017, 13:48  [ТС] 3
Цитата Сообщение от shmkv Посмотреть сообщение
у предыдущего элемента не загуляешь next при удалении.
Это какой язык Уважаемый? Молдавский, или?
Весь код работает исправно, не работает только
Цитата Сообщение от St-137 Посмотреть сообщение
del_element_end()
0
1353 / 514 / 68
Регистрация: 21.07.2015
Сообщений: 1,281
10.02.2017, 14:19 4
Цитата Сообщение от St-137 Посмотреть сообщение
Это какой язык Уважаемый? Молдавский, или?
Это автозамена, "не зануляешь" имелось ввиду.
Цитата Сообщение от St-137 Посмотреть сообщение
Весь код работает исправно, не работает только
Я его и смотрел.

Добавлено через 2 минуты
Ну или как вариант вместо сравнения с нулем сравнивать с last. Также не вижу у тебя обработки случая, когда остался 1 элемент. Речь только про del_element_end, остальное даже не смотрел.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.02.2017, 14:19

Удаление последнего элемента из однонаправленного линейного списка
Здравствуйте, удаляю значится элемент: (x - порядковый номер удаляемого элемента, начиная с 1....

Удаление последнего введенного элемента из списка (стека)
Напишите пожалуйста программу для удаления последнего введенного элемента из списка (стеку)

Удаление последнего элемента Дека
Все работает, кроме удаления последнего элемента. Подскажите пожалуйста, что не так? #include...

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


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

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

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