Niepotrzebny ci żaden wskaźnik na nastepny element. To robi lista, z której ty korzystasz, a nie implementujesz.
Lista jest w rzeczywistości (tak jest implementowana) jako taki "łańcuszek" (każdy element ma wskaźnik na kolejny i ew. na poprzedni), ale nie bezpośrednio elementów typu jaki przetrzymuje, ale jakichś pomocniczych strukturek która zawiera przetrzymywany obiekt (właściwy element) i wspomniane wskaźniki.
Np.:
template<typename T>
class List
{
struct Node
{
Node * next;
T el;
};
Node * m_begin;
// reszta implementacji..
};
Tak dla rozjaśnienia, bo widze, że sie gubisz. Nie wiem czy to cokolwiek pomogło, ale nie chce pisać więcej bo tylko odchodzimy od tematu.
Także mógłbyś to napisać tak:
struct student{
string numer_albumu;
string imie;
string nazwisko;
string rok_studiow;
string kierunek;
string specjalnosc;
};
std::list<student> lista;
string numer_albumu, imie, nazwisko, rok, kierunek, specjalnosc;
cout << "Podaj wszystkie informacje o studencie. << endl;
cout << "Numer albumu: ";
cin >> numer_albumu;
cout << "Imie studenta: ";
cin >> imie;
cout << "Nazwisko studenta: ";
cin >> nazwisko;
cout << "Rok studiow: ";
cin >> rok;
cout << "Kierunek studiow: ";
cin >> kierunek;
cout << "Specjalnosc: ";
cin >> specjalnosc;
cout << endl;
lista.push_front({numer_albumu, imie, nazwisko, rok, kierunek, specjalnosc});