Stowrzyłem klasę lista, która chce teraz wyczyścić(metoda wyczysc na samym dole klasy), problem w tym, że jeśli dodaje: "delete korzen" to program sie wysypuje, a bez niego nie usuwa mi ostatniego elementu z listy.
Jak mogę to naprawić?
#include <string>
#include <iostream>
using namespace std;
class Lista
{
struct Element
{
int ilosc;
string nazwa;
Element *nastepny;
};
Element *korzen, *ostatni;
public:
Lista()
{
korzen = ostatni = NULL;
}
Lista(const Lista &list)
{
if (list.korzen == list.ostatni)
korzen = ostatni = NULL;
else
{
Element *pom = list.korzen;
korzen = new Element;
korzen->ilosc = pom->ilosc;
korzen->nazwa = pom->nazwa;
ostatni = korzen;
while(pom!=list.ostatni)
{
pom = pom->nastepny;
ostatni->nastepny = new Element;
ostatni = ostatni->nastepny;
ostatni->ilosc = pom->ilosc;
ostatni->nazwa = pom->nazwa;
}
}
}
~Lista()
{
Element *pom=korzen;
while(korzen!=ostatni)
{
pom = korzen;
korzen = korzen->nastepny;
delete pom;
}
delete korzen;
}
void dodaj(int ilosc, string nazwa)
{
if (ostatni!=NULL)
{
ostatni->nastepny = new Element;
ostatni = ostatni->nastepny;
}
else
{
korzen = ostatni = new Element;
}
ostatni->ilosc = ilosc;
ostatni->nazwa = nazwa;
}
void wyswietl()
{
Element *pom=korzen;
while(pom!=ostatni)
{
cout << pom->nazwa << " " << pom->ilosc<<endl;
pom = pom->nastepny;
}
cout << ostatni->nazwa << " " << ostatni->ilosc<<endl;
}
void usun()
{
Element *pom = korzen;
while(pom!=korzen)
{
if (pom);
}
}
void wyczysc()
{
Element *pom = korzen;
while (korzen != ostatni)
{
pom = korzen;
korzen = korzen->nastepny;
delete pom;
}
//delete korzen;
}
};
int main()
{
Lista list;
list.dodaj(5, "bulki");
list.dodaj(5, "mleko");
list.dodaj(5, "mleko");
list.wyswietl();
Lista l1 = list;
l1.wyswietl();
l1.wyczysc();
l1.wyswietl();
return 0;
}