gpt4 book ai didi

c++ - 用于删除与另一个成员相等的链表成员的嵌套循环正在中断。将问题隔离到一行

转载 作者:太空狗 更新时间:2023-10-29 21:46:06 26 4
gpt4 key购买 nike

我一直在一位导师的帮助下研究我的链表实验室,但不幸的是不久前与他们失去了联系,我无法自己解决这个问题。

我的第一个 while 循环一次遍历链表一个节点,然后进入第二个 while 循环,它遍历第二个节点并将其与第一个节点进行比较。这似乎工作正常。然而,问题在于,当它删除一个成员时,它实际上会继续并删除两个。它会删除它之前的节点,以及它应该删除的节点。

我已将问题隔离到 list.cpp 的第 80 行(如下)。我认为 cursorOne 的 link_field 指向游标 2 的链接字段正在删除两个游标之间的所有节点,这不是我想要的。

所以我想我应该让光标 1 的链接字段指向光标 1 的下一个链接字段?我感觉很接近......而且这个实验的困难部分已经完成,但我还没有得到最后的灵光一现的时刻,但我一直在研究它。

这是程序:它应该很容易解释。它使用节点类,然后用列表类对其进行变异。

再想想,我想我不能链接到 ideone.com 上的代码。因此,我将尝试使它尽可能简短,然后只发布循环。这是 nodelist.cpp

      while(currentItem != NULL)
{
cout << "Enter Second Loop" << endl;
cout << currentItem->data_field << " Curse 2" << endl;

//compare it
if (nodeToFindDuplicatesOf->data_field == currentItem->data_field)
{

//prev->next = current->next to delete
// in order to delete only one, I must find a way to set the link_field of the previous node to cursor 1 to
// the link field of the node that's to be deleted
cout << nodeToFindDuplicatesOf->data_field << "being removed" << endl;
predecessor = currentItem->link_field;
delete currentItem;

currentItem = nodeToFindDuplicatesOf; //set cursor2 to cursor1

}
currentItem = currentItem->link_field;
}
nodeToFindDuplicatesOf = nodeToFindDuplicatesOf->link_field;
if (nodeToFindDuplicatesOf)
currentItem = nodeToFindDuplicatesOf->link_field;
}

我的节点类中是否需要前一个节点指针?

最佳答案

您定位错误的分析是正确的。要从列表中删除一个项目,您需要一个指向要删除的 currentItem(又名 cursorTwo)及其前身的指针。然而,您的 cursorOne 指针不是 cursorTwo 的前身,而是指向您想要查找其拷贝的某个节点的指针。

要修复错误,首先为您的变量使用有意义的名称。 cursorOnecursorTwo 根本没有意义,它们的名称很可能是错误的来源。为什么不称它们为 nodeToFindDuplicatesOfcurrentItem? (或者也许您可以想出更好的办法。)

然后你需要引入一个新的指针来跟踪currentItem的前身。

当需要删除 currentItem 时,设置其前身的 link_field,然后 delete currentItem(不将其设置为 NULL 预先)。

关于c++ - 用于删除与另一个成员相等的链表成员的嵌套循环正在中断。将问题隔离到一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15956188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com