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

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

Войти
Регистрация
Восстановить пароль
 
Alex_Dep
Сообщений: n/a
#1

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

19.06.2012, 01:47. Просмотров 393. Ответов 0
Метки нет (Все метки)

не могу понять как мне сделать так что бы если введены все отрицательные числа он удалял их и выводил что список пусто. В моей программе он удаляет все отрицательные, но если все элементы отрицательные выдает ошибку. подскажите чего не хватает моей программе, заранее при много благодарен.
Код
#include <iostream>
#include <windows.h>
#include <locale>
 using namespace std;

 class Node
{ 
	public:
	int numer;
	Node* next;
};
 void main()
{
	setlocale(LC_ALL,"rus");
	Node* head = NULL;
	Node* body = NULL;
	short action = -1;
	while (1)
	{
		cout<<"1. Добавить элемент"<<endl;
		cout<<"2. Просмотр списка"<<endl;
		cout<<"3. Поиск отрицательных элементов"<<endl;
		cout<<"4. Удаление первого отрицательного элемента"<<endl;
		cout<<"0. Выход"<<endl;
		cout<<"Ваш Выбор: ";
		cin>>action;

		if (action == 0)
		{
			system("CLS");
			break;
		}	
		if (action == 1)
		{
			Node* ptr = new Node;
			int m;
			cout<<"Введите Число: ";
			cin>>m;
			ptr->numer = m;
			ptr->next = NULL;
			if (head == 0)
			{	
				head = ptr;
				body = ptr;
				system("CLS");
				continue;
			}	
			body->next = ptr;
			body = ptr;
			system("CLS");
			continue;
		}

		if (action == 2)
		{
			Node* ptr = NULL;
			if (head == NULL)
			{	
				cout<<"СПИСОК ПУСТ"<<endl;
				system("PAUSE");
				system("CLS");
				continue;
			}	
			cout<<" СПИСОК "<<endl;
			ptr = head;
			while (1)
			{
				cout<<ptr->numer<<" ";
				if (ptr->next == NULL)
					break;
				ptr = ptr->next;
			}
			cout<<"\n\n";
			system("PAUSE");
			system("CLS");
			continue;
		}
		if (action == 3)
		{
			body=head;
			while (body!=NULL)
			{ 
				if (body->numer<0)
					cout<<body->numer<<" ";
				body = body->next;
			}	
			cout<<endl;
			system("PAUSE");
			system("CLS");
		}
	if (action == 4)
{
	system("CLS");
	Node* del = NULL;
	Node* last = head;

	body=head;
	while (body!=NULL)
	{
		if (body->numer<0)
		{
			
			del=body;
			body=body->next;
			last->next=body;
			if (del==head) 
				head=body;
			delete del;
		}
		else
			if(body && (body->numer<0 && body->next==NULL))
		{
			head==NULL;
		}
			else
		{
			last=body;
			body=body->next;
		}
	}
}

	cout<<endl;
	}
	}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2012, 01:47     Удаление всех отрицательных в односвязном списке
Посмотрите здесь:

удаление/добавление записи по ключу в односвязном списке C++
C++ Сортировка вставками в односвязном списке
Ошибка в односвязном списке C++
Удаление узлов в односвязном списке C++
C++ Как можно сместить ID в односвязном списке после удаление элемента
Ошибка в односвязном списке C++
Удаление по ключу в односвязном списке C++
Удаление повторяющихся элементов в односвязном списке C++
Найти в односвязном списке отрицательные элементы и удалить их C++
C++ Удалить все вхождения элемента в односвязном списке
Поиск и удаление в односвязном списке C++
C++ Ошибка с удалением элемента в односвязном списке

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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