Witam, mam problem z usuwaniem danego elementu z listy. W metodzie Usun_Z_Listy zwalniam pamięć z danego elementu za pomocą nowego wskaźnika tmp, ustawionego na początek listy , następnie przechodzi po elementach listy aż napotka element o żądanym elemencie i go usuwa. Tylko, że pamięć zostanie zwolniona ale każdy z elementów posiada wskaźnik do następnego elementu z listy. Czyli któryś z tych wskaźników(elementów) będzie pokazywać nadal na jakiś obszar pamięci . Co w takim razie powinienem zrobić (wydaję mi się, żeby ustawić wskaźnik na zero) .
Nie jestem pewien czy dobrze wytłumaczyłem mój problem.
#include <iostream>
using namespace std;
struct Element{
Element():nastepny_element(0){};
int val;
Element* nastepny_element;
};
struct Lista
{
Element* poczatek; // DLaczego to
Lista():poczatek(0){}
void Dodaj_Element(int v);
void Usun_Z_Listy(int liczba);
void Wyswietl_liste();
};
void Lista::Dodaj_Element(int v)
{
Element* nowy = new Element();
nowy->val = v;
if(poczatek==0)
{
poczatek=nowy;
}
else
{
Element* tmp = poczatek;
while(tmp -> nastepny_element)
{
tmp= tmp -> nastepny_element;
}
tmp->nastepny_element=nowy;
}
}
void Lista::Wyswietl_liste()
{
cout << poczatek->val <<endl;
Element* tmp = poczatek;
while(tmp -> nastepny_element)
{
cout<< tmp -> nastepny_element->val << endl;
tmp = tmp -> nastepny_element;
}
}
void Lista::Usun_Z_Listy(int liczba)
{
int licznik = 1;
Element* tmp = poczatek;
while(tmp -> nastepny_element)
{
licznik++;
tmp= tmp -> nastepny_element;
if(licznik==liczba)
{
delete tmp;
}
}
}
int main()
{
Lista lista;
lista.Dodaj_Element(100);
lista.Dodaj_Element(200);
lista.Dodaj_Element(300);
lista.Dodaj_Element(400);
lista.Dodaj_Element(500);
lista.Wyswietl_liste();
cout << "Po usunieciu elementu" << endl;
lista.Usun_Z_Listy(3);
lista.Wyswietl_liste();
return 0;
}