从REAR到FRONT的打印节点进入无限循环

时间:2014-12-08 20:44:43

标签: c++ linked-list nodes

我正在尝试从右(后/尾)到左(头/前)从每个节点输出元素。但是,我的程序进入一个无限循环,一遍又一遍地显示相同的元素。尽管它有无限循环,我创建的DisplayFromLeftToRight()函数(在DisplayFromRightToLeft()函数下面找到)的功能就像一个魅力,但这并不...

void DisplayFromRightToLeft()
{
    node *newnode = rear;
    int num = 1;
    while (newnode != NULL)
    {
        cout << "Node # " << num << ": " << newnode->data << endl;
        newnode = newnode->previous;
        num++;
    }
    return;
}

这是从每个节点打印元素的工作代码,从LEFT到RIGHT ..

void DisplayFromLeftToRight() 
{
    node *newnode = front;
    int num = 1;
    while (newnode != NULL)
    {
        cout << "Node # " << num << ": " << newnode->data << endl;
        newnode = newnode->next;
        num++;
    }
    return;
}

如果您认为我的DisplayFromRightToLeft()函数是正确的,我假设问题来自INSERT函数,请看一下:

void INSERT(int _data)
{
    node *newnode = new node;
    newnode->data = _data;
    newnode->next = NULL;
    newnode->previous = newnode;
    rear = newnode;
    node *index = new node;
    index = front;

    if (isEmpty())
        front = newnode;
    else
    {
        while (index->next != NULL)
        {
            index = index->next;
        }
        index->next = newnode;
    }
}

2 个答案:

答案 0 :(得分:1)

看起来INSERT总是在有效地址之前设置,所以你的while(newnode!= NULL)循环永远不会结束,因为它每次都会设置newnode = newnode-&gt;。

你是正确的,问题似乎在你的INSERT函数和/或任何其他代码中确定列表中的内容。

你的显示......()函数看起来不错,只要不循环,但是通过使它们依赖于while(someNode!= NULL)循环,它们依赖于列表数据很好的假设-formed。具体来说,第一个节点必须有一个指向NULL的前一个指针,最后一个节点必须有一个指向NULL的下一个指针,否则其中一个Display函数将循环,直到找到NULL为止。

查看INSERT函数,如果按照这些步骤进行操作,您将看到它为newnode分配了一个新的有效地址,然后设置了该有效地址的前一个,而next接收了NULL,并且它可以分配给其他东西。以前怎么会是NULL? Previous也指向插入的节点本身,看起来像之前的任何循环只是继续查看同一个节点。

每当使用我实现的链接列表时,我总是会逐步完成代码和图表 - 在纸面上是最好的,而不仅仅是想象力。只绘制实际拥有代码的内容。否则,您可能假设结果列表数据是您想要的,而不是您实际编码的内容。

答案 1 :(得分:0)

你应该改变:

newnode->previous = newnode;

要:

newnode->previous = rear;

行:

newnode->previous = newnode;

毫无意义。这就好说我是我自己的父亲。