链接列表中的指针错误?

时间:2014-11-25 05:27:50

标签: c++ linked-list

我想创建一个带有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;
}

1 个答案:

答案 0 :(得分:1)

您需要添加

if(p->urm!=0)// this line
        q->info = (p->info + p->urm->info) / 2;

因为p-> urm可能是NULL

我在添加建议行后尝试在Visual Studio中运行正常。虽然我不明白你会通过添加两个地址得到什么。