【发布时间】:2021-06-09 21:56:00
【问题描述】:
这是一个基本函数,它采用迭代器位置并删除该位置的节点,但它给我一个运行时错误。我做错了什么?
iterate erase(iterate position)
{
iterate i;
Node<T>* temp = head;
if (head == NULL) {
cout << "empty list" << endl;
}
else if (position.pointer == head) {
head = temp->next;
temp->next->previous = NULL;
delete position.pointer;
}
else {
while (temp != NULL) {
if (temp == position.pointer->previous) {
temp->next = position.pointer->next;
temp->next->previous = temp;
i.pointer = temp->next;
delete position.pointer;
return i;
}
}
}
【问题讨论】:
-
格式化您的代码使其可读。
-
并非所有路径都返回一个值,即未定义行为。此外,该 while 循环通常永远不会结束,因为您不更新
temp。 -
我修复了格式,但缺少
} -
就此而言,在处理双链表时,您根本不需要
while循环。 -
@Nada 似乎这个 while 循环 while (temp != NULL) 是无限的。