试图理解为什么我的链接列表只显示最后添加的节点



所以我现在不明白了,我的想法是制作一个链接列表,用户可以在其中添加多个学校科目,它需要显示在最后,但我得到的是最后插入的科目,它在最后是信息。也许有人能帮忙?

#include <iostream>
using namespace std;
struct cvor {
int sif_pred;
string naz_pred;
int br_sati_pr;
int br_sati_vj;
cvor* veza; //veza=link
} faks;
void unos(cvor*& glava, cvor* noviPredmet) //glava=head
{
noviPredmet->sif_pred = faks.sif_pred;
noviPredmet->naz_pred = faks.naz_pred;
noviPredmet->br_sati_pr = faks.br_sati_pr;
noviPredmet->br_sati_vj = faks.br_sati_vj;
noviPredmet->veza = glava;
glava = noviPredmet;
}
void ispis(cvor*& glava)
{
while (glava) {
cout << glava->sif_pred << " ";
cout << glava->naz_pred << " ";
cout << glava->br_sati_pr << " ";
cout << glava->br_sati_vj << " ";
glava = glava->veza;
}
}
int main()
{
cvor* glava = 0;
cvor* noviPredmet = new cvor;
int x;
do {
do {
cout << "Unesti sifru predavanja: ";
cin >> faks.sif_pred;
cout << "nUnesti naziv predavanja: ";
cin >> faks.naz_pred;
cout << "nUnesti broj stai predavanja: ";
cin >> faks.br_sati_pr;
cout << "nUnesti broj stai vjezbi: ";
cin >> faks.br_sati_vj;
} while (faks.br_sati_vj != 0);
unos(glava, noviPredmet);
cin >> x;
} while (x != 0);
ispis(glava);
return 0;
}

您只分配一个节点,在这里:

cvor* noviPredmet = new cvor;

然后,每次,您都会将相同的节点添加到列表中:

unos(glava, noviPredmet);

@DavidSchwartz是对的,你应该在你的代码中移动这一行

cvor* noviPredmet = new cvor;

下面几行,夹在两个do命令之间,它应该按预期工作。

打破外部循环的变量x的作用是什么?我注意到,代码将只打印已插入最后一个外循环的节点,即带有x = 0的节点。

最新更新