在导师的帮助下,我一直在研究我的链表实验室,但不幸的是不久前与他们失去了联系,我自己也无法解决这个问题。
我的第一个 while 循环一次遍历链表一个节点,然后进入第二个 while 循环,该循环遍历第二个节点并将其与第一个节点进行比较。这似乎工作正常。然而问题在于,当它删除一个成员时,它实际上会继续删除两个。它会删除它之前的那个,以及它应该删除的节点。
我已将问题隔离到 list.cpp 的第 80 行(如下)。我认为 cursorOne 的 link_field 指向光标 2 的链接字段正在删除两个光标之间的所有节点,这不是我想要的。
所以我想我应该让光标 1 的链接字段指向光标 1 的下一个链接字段?我感觉如此接近.. 这个实验室的困难部分已经完成,但我还没有得到最后一个 Eureka 时刻,但我已经看了很多。
这是程序:它应该是不言自明的。它使用节点类,然后使用列表类对其进行变异。
再想一想,我想我无法链接到 ideone.com 上的代码。所以我会尽量让这个尽可能简短,然后发布循环。这是节点和list.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;
}
}
我的节点类中是否需要前一个节点指针?