my destructor:
~list() {
for (node *p; !isEmpty();)
{
p = head->next;
delete head;
head = p;
}
}
我的函数附加:
void append( list L2)
{
if (head == 0 && L2.head == 0)
{
cout << "Error List Empty" << endl;
}
else if (isEmpty())
{
L2.printAll();
}
else if (L2.isEmpty())
{
printAll();
}
else
{
tail->next = L2.head;
tail = L2.tail;
L2.head = L2.tail = 0;
}
}
当析构函数尝试运行时,代码将停止。
我的主要:
int main()
{
list l1;
l1.addToHead(1);
l1.addToHead(2);
list l2;
l2.addToHead(9);
l2.addToHead(3);
l2.addToHead(4);
l1.printAll();
cout << "-------------------" << endl;
l2.printAll();
l1.append(l2);
cout << "=============" << endl;
输出:2 1斜线4 3 9等价线按任意键继续...
当我没有考虑其他条件(例如 l1 是否为空或 l2 为空)时,代码工作正常。它将 l2 附加到 l1,并清空 l2。
但是现在我正在尝试解释两个列表都为空或一个列表为空,我得到了一个调试断言。看起来析构函数尝试运行,然后在"删除头"之前遇到问题
更新--
isEmpty fn:
int isEmpty() {
return head == 0;
}
我敢打赌isEmpty
正在检查head
是否NULL
,这总是评估为true
,因为你从未以其他方式设置它。
试试这个:
node* p = NULL;
while (head != NULL)
{
p = head->next;
delete head;
head = p;
}
我认为 isEmpty() 的返回类型应该是布尔值
bool isEmpty() {
return head == 0;
}