【发布时间】:2010-02-17 02:22:01
【问题描述】:
我是我的第一个 C++ 课程的编程学生,最近我们介绍了链表,我们被分配了一个任务来实现一个简单的链表。除了pop_back() 函数之外,我已经编写了所有代码,该函数应该返回指向Node 的指针,该指针需要在Main() 中删除。否 Node 删除是在实际功能中完成的。所以我的问题是:
您愿意帮助我为我的pop_back() 功能指明正确的方向吗?另外,如果您发现我做错了什么,请告诉我。
另外,这个链表只适用于字符串。在这种情况下,是一个购物清单,所以一个字符串表示项目的数量(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;
}
List.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
}
【问题讨论】:
标签: c++ pointers linked-list