为什么我的析构函数导致我的链表出现问题



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

相关内容

  • 没有找到相关文章

最新更新