помогите переделать программу. когда я ввожу -1, -2 и -3. а мне надо удалить все отрицательные элементы он выдает какую то ошибку.
Код:
#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)
{
system("CLS");
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;
system("CLS");
if (head == NULL)
{
cout<<"СПИСОК ПУСТ"<<endl;
system("PAUSE");
system("CLS");
continue;
}
cout<<" СПИСОК "<<endl;
ptr = head;
while (1)
{
cout<<ptr->numer<<" ";
if (ptr->next == 0)
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;
}
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
{
last=body;
body=body->next;
}
}
if (head == NULL)
{
puts("Пустой список");
system("PAUSE");
system("CLS");
continue;
}
}
cout<<endl;
}
}
и в двух связном списке такая же проблемма. ввожу два отрицательных числа. он удаляет их и выходит ошибка.
Код:
#include<iostream>
#include<conio.h>
using namespace std;
struct node
{
int info;
node *rlink;
node *llink;
};
node* f(node *r)
{
node *t;
t=r;
while(t!=NULL)
{
if(t->info<0)
return t;
t=t->llink;
}
return t;
}
//список с право на лево
void llist(node *left)
{
node *k=left;
while(k!=NULL)
{
cout<<k->info<<"\t";
k=k->rlink;
}
if(left==NULL)
cout<<"Список пуст!\n";
}
//список слева на право
void rlist(node *right)
{
node *k=right;
while(k!=NULL)
{
cout<<k->info<<"\t";
k=k->llink;
}
if(right==NULL)
cout<<"Список пуст!\n";
}
void main()
{
setlocale(LC_ALL,"");
node *k, *q, *left, *right;
int n,i=1;
cout<<"Введите кол-во чисел: ";
cin>>n;
k=new node;
cout<<"Введите число: ";
cin>>k->info;
k->rlink=NULL;
k->llink=NULL;
right=k;
q=k;
while(i<n)
{
k=new node;
cout<<"Введите число: ";
cin>>k->info;
k->rlink=q;
q->llink=k;
q=k;
i++;
}
q->llink=NULL;
left=q;
cout<<"\nСписок до преоброзования с лева на право: \n";
rlist(right);
cout<<"\nСписок до преоброзования с права на лево: \n";
llist(left);
cout<<"\n\n//--------------------------------------//";
// поиск и удаление отрицательных элементов
bool fll=true;
while(fll)
{
k=left;
node *l,*res;
res=f(right);
if(left->info<0 && left->rlink==NULL)
{
left=NULL;
right=NULL;
}
else
if(res!=NULL && res->info<0)
{
fll=true;
while(k!=NULL)
if(res==k)
if(k==left)
{
q=k;
left=k->rlink;
left->llink=NULL;
l=k=left;
delete q;
}
else
if(k==right)
{
q=k;
right=k->llink;
right->rlink=NULL;
k=NULL;
delete q;
}
else
{
q=k;
l->rlink=k->rlink;
k->rlink->llink=l;
delete q;
k=l->rlink;
}
else
{
l=k;
k=k->rlink;
}
}
else
fll=false;
}
cout<<"\n\nСписок после преоброзования с лева на право: \n";
rlist(right);
cout<<"\nСписок после преоброзования с права на лево: \n";
llist(left);
getch();
}
пожалуйста помогите. я не могу понять чего не хаватает