c++ - 打印节点从REAR到FRONT进入死循环

标签 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;
}

这是从左到右从每个节点打印元素的工作代码。

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;
    }
}

最佳答案

看起来 INSERT 总是将 previous 设置为有效地址,因此您的 while (newnode != NULL) 循环将永远不会结束,因为它每次都会设置 newnode = newnode->previous。

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

您的 Display...() 函数本身看起来没有循环,但通过使它们依赖 while(someNode != NULL) 循环,它们依赖于列表数据良好的假设-形成。具体来说,第一个节点必须有一个指向 NULL 的 previous 指针,最后一个节点必须有一个指向 NULL 的 next 指针,否则其中一个 Display 函数将循环直到找到 NULL。

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

每当使用我实现的链接列表时,我总是逐步查看代码和图表,了解发生了什么 - 在纸上是最好的,而不仅仅是想象。只绘制您实际让代码执行的操作。否则,您可能会假设结果列表数据是您想要的,而不是您实际编码的。

关于c++ - 打印节点从REAR到FRONT进入死循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27366561/

相关文章:

c++ - 使用 std::remove_if() 时没有可行的重载 '='

c++ - 从 C++ 调用 awk 脚本在 "bozo :wait_for"停止

c++ - 双向链表。逻辑错误

c++ - 双向链表中循环的开始?

c++ - 如何在运行时将信息传递给线程?

C++ 初始化成员初始化列表中的指针

c++ - 为有序链表 C++ 编写插入算法

r - 使用 R 在坐标系中绘制节点和边

php - DOM loadhtml提取节点和子节点

javascript - 如何使用XML文档的childNodes?