Stworzyłem listę jednokierunkowa i trzy funkcje dodawanie elementu, usuwanie i wyświetlanie. Wszystko działa po za usuwaniem elementu ze środka lub końca listy. Mógłby mi ktoś pomóc ?
#include<iostream>
#include<string>
using namespace std;
struct osoba
{
string imie;
string nazwisko;
osoba *nastepny; //wsk na nastepna osobe
osoba(); //konstruktor
};
osoba::osoba()
{
nastepny=0;
}
struct lista
{
osoba *pierwszy; //wsk na pierwsza osobe
void dodaj(string imie , string nazwisko); // funkcja dodajaca elemnty listy
void wyswietl(); //funkcja wyswietlajaca elemnty listy
void usun(string imie); //funkcja usuwajaca elemnty listy
lista(); //konstruktor
};
void lista::dodaj(string imie, string nazwisko)
{
osoba *nowa = new osoba; //nowy lement osoba
nowa->imie = imie;
nowa->nazwisko = nazwisko;
if(pierwszy == 0) //jezeli ejst to pierwszy elemnt listy
{
pierwszy = nowa;
}
else //jezeli to nie jest pierwszy element
{
osoba *temp = pierwszy;
while(temp->nastepny)
{
temp=temp->nastepny;
}
temp->nastepny = nowa;
nowa->nastepny=0;
}
}
void lista::wyswietl()
{
osoba *temp=pierwszy; //wskaznika na pierwszy elemnt listy
while(temp)
{
cout<<temp->imie<<" "<<temp->nazwisko<<endl;
temp=temp->nastepny;
}
}
void lista::usun(string imie)
{
osoba *temp=pierwszy;
int licznik=1; //licznik zliczajacy ktory to elemnt listy
while(temp)
{
if(temp->imie==imie) //jesli znajdzie element o podanym imieniu
{
if(temp==pierwszy) //jesli trzeba usunac pierwszy element
{
pierwszy=temp->nastepny;
}
else if(temp!=pierwszy && temp->nastepny!=0) //jesli srodkowy elemnt
{
osoba *temp2=pierwszy;
for(int i=0 ; i<(licznik-1) ; i++)
{
temp2->nastepny; //wsk na elemnt (n-1)
}
temp->nastepny = temp2; //przypisanie elemntowi (n-1) wskaznika na (n+1)
}
else //jesli osttani element
{
temp->nastepny=0;
}
}
licznik++;
temp=temp->nastepny;
}
}
lista::lista()
{
pierwszy=0;
}
int main()
{
lista *LISTA= new lista;
string imie, nazwisko;
for(int i=0 ; i<5; i++)
{
cin>>imie;
cin>>nazwisko;
LISTA->dodaj(imie,nazwisko);
}
cin>>imie;
LISTA->usun(imie);
LISTA->wyswietl();
system("pause");
}