链接列表并通过引用传递

问题描述 投票:0回答:1

我必须写一些代码来处理链表。我对所要询问的内容有些困惑。我正在使用deleteFront函数,该函数当然会删除前端节点。有3种情况需要注意:1)列表已经为空2)列表有1个节点,3)其他。我对方案2的处理感到困惑。这些指令说:“通过OldNum(通过引用传递)返回前节点元素,删除前节点并更新计数。这就是我所有的全部3种情况,有人可以帮助我理解每一行代码吗:

void llist::deleteFront(el_t& OldNum) {
    if (isEmpty()) {
        throw underflow()
    }
    else if (Count == 1) {              
        OldNum = Front->Elem;           
        Node *Second;                   
        delete Front;
        Count--;
    }
    else {
        OldNum = Front->Elem;
        Node *Second;
        Second = Front->Next;
        delete Front;
        Front = Second;
        Count--;
    }

}
c++ linked-list pass-by-reference
1个回答
0
投票
void llist::deleteFront(el_t& OldNum) { 
    if (isEmpty()) {
        throw underflow()
    }

如果列表为空,我们将抛出一个异常(它将通知开发人员,调用代码在已经为空的列表上错误地调用了deleteFront();]]

    else if (Count == 1) {              

如果有一个节点,我们将执行以下操作:

        OldNum = Front->Elem;           

我们将一个元素从刚删除的节点返回给调用者,因为Oldnum参数是一个引用(&),我们可以将该元素存储在该引用中,并且函数结束后,调用者可以访问它;

        Node *Second;                   

我们为新节点声明了一个指针,但未使用它,因此该行实际上不执行任何操作(可以将其删除);

        delete Front;
        Front = NULL; //missing!!

我们删除了唯一的现有Front节点,并释放了它所占用的内存(以及elem字段和所有其他(如有));请注意,必须添加Front = NULL;才能正确使现在指向空的Front指针无效;

        Count--;
    }

我们将Count1(至0并完成。

    else {

在最后一种情况下,如果存在多个节点:

        OldNum = Front->Elem;

我们完全按照上述情况返回元素;

        Node *Second;
        Second = Front->Next;

我们需要暂时“记住”名称为Second的下一个节点(它将是现在的第一个节点;]]

        delete Front;

现在我们删除First节点,释放其内存;

        Front = Second;

因为Front指针必须始终指向第一个节点,所以我们用Second重新分配了它(这就是我们记住它的原因;]]

        Count--;
    }

我们将Count1并完成;

我希望它能有所帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.