我是我的第一个 C++ 类(class)的编程学生,最近我们学习了链表,我们得到了一个实现一个简单列表的作业。除了我的 pop_back() 函数之外,我已经编码了所有内容,该函数应该返回一个指向需要在 Node 中删除的 Main() 的指针。实际函数中不需要删除Node。所以我的问题是:

您愿意为我的 pop_back() 函数指出正确的方向吗?另外,如果你发现我做错了什么,请告诉我。

此外,此链表仅用于处理字符串。在本例中,是一个杂货 list ,因此有一个字符串表示商品的数量 (1,2),还有一个表示商品类型的字符串。 (牛奶、鸡蛋等)

下面我已经包含了我的 List 和 Node 类实现,因此您可以了解我到目前为止所做的工作。

Node.cpp

Node::Node(void)
{
    descrip = " ";
    quantity = " ";
    previous = NULL;
    next = NULL;
}
Node::Node(string q, string d)
{
    descrip = d;
    quantity = q;
    previous = NULL;
    next = NULL;
}
Node* Node::GetNext()
{
    return next;
}
Node* Node::GetPrevious()
{
    return previous;
}
void Node::SetNext(Node * setter)
{
    next = setter;
}
void Node::SetPrevious(Node * setter)
{
    previous = setter;
}

列表.cpp
List::List(void)
{
   first = NULL;
   last = NULL;
   numNodes = 0;
}
Node* List::GetFirst()
{
    return first;
}
Node* List::GetLast()
{
    return last;
}
void List::SetFirst(Node* setter)
{
    first = setter;
}
void List::SetLast(Node* setter)
{
    last = setter;
}
int List::GetNumNodes()
{
    return numNodes;
}
void List::push_front(Node* item)
{
   if (first == NULL)
   {
       first = item;
       last = item;
   }
   else
   {
       Node* pFirst = first;
       item->SetNext(pFirst);
       first = item;
       numNodes++;
   }
}
void List::push_back(Node * item)
{
    if (last == NULL)
    {
       first = item;
       last = item;
    }
    else
    {
        last->SetNext(item);
        last = item;
        numNodes++;
    }
}
Node* List::pop_front()
{
    Node* temp = first;
    first = first->GetNext();
    if (first == NULL)
    {
        temp = first->GetNext();
        first = p;
    }
    if (first == NULL)
    {
        last = NULL;
    }
    if (numNodes > 0)
    {
        numNodes--;
    }
    return temp;
}
Node* List::pop_back() // this whole function may be wrong, this is just my attempt at it
{
    Node* temp;
    temp = first;

    while((temp->GetNext()) != NULL)
        // im stuck here

}

最佳答案

因此,如果我理解这一点,您只是想遍历您的链表,直到到达链表中的最后一个节点并将指针返回给它?
我很确定你有什么可以做到,除了

Node* List::pop_back() // this whole function may be wrong, this is just my attempt at it
{
    Node* temp;
    temp = first;
    while(temp->GetNext() != NULL)
    {
        temp = temp->GetNext();
    }
    return temp;
}

因此,如果我读对了,它将不断循环,直到它到达后面没有一行的节点,然后返回它。

关于c++ - C++ 中的简单链表实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2277918/

10-11 23:20
查看更多