Я студент по программированию в моем первом классе 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
}