我想创建一个带有integeres的链表,并且我想在每两个节点之间创建另一个节点,该节点是前一个节点和后一个节点之间的平均值。
在我的添加功能中,我不明白为什么我的 p 指针位于链表中的最后一个元素而不是第一个元素。 (这就是为什么我认为它崩溃了。)
谢谢。
#include<iostream>
using namespace std;
struct Nod{
int info;
Nod* urm;
};
void create(const int &a, Nod *&p, Nod *&u)
{
if (p == NULL)
{
p = new Nod;
p->info = a;
u = p;
}
else
{
Nod *q;
q = new Nod;
q->info = a;
u->urm = q;
u = q;
}
u->urm = NULL;
}
void print(Nod *p)
{
while (p->urm)
{
cout << p->info<<" -> ";
p = p->urm;
}
cout << p->info;
}
void add(Nod *p)
{
while (p)
{
Nod *q;
q = new Nod;
q->info = (p->info + p->urm->info) / 2;
q->urm = p->urm;
p->urm = q;
p = p->urm->urm;
}
}
int main()
{
Nod *p, *u;
p = u = NULL;
char *numar;
numar = new char[100];
cout << "Enter a number: "; cin >> numar;
for (int i = 0; (unsigned)i <= strlen(numar) - 1; i++)
create(numar[i] - '0', p, u);
add(p);
print(p);
system("Pause");
return 0;
}
答案 0 :(得分:1)
您需要添加
if(p->urm!=0)// this line
q->info = (p->info + p->urm->info) / 2;
因为p-> urm可能是NULL
。
我在添加建议行后尝试在Visual Studio中运行正常。虽然我不明白你会通过添加两个地址得到什么。