我正在尝试将一些元素添加到已经有其他项目的队列的前面。我的代码工作正常,但每次都会在前面添加项目。如何修改它以在前面添加后添加下一个项目。这就是我得到的:
void Queue::addtoFront(string first, string last){
Node *temp = new Node(first, last, NULL);
temp->next = head;
head = temp;
}
答案 0 :(得分:0)
注意:我不确定你要做什么,但是你可以写一个' insertAfter'会员功能。此函数接受一个新元素,并在链接列表中的给定元素之后立即插入它。
为此,您必须先设置“下一步”'链接新元素,然后在请求的元素之后立即插入新元素。
void Queue::insert(Node *newElement, Node *insertAfter)
{
_ASSERT(insertAfter != nullptr);
_ASSERT(newElement != nullptr);
// set the 'next' of the new element to the 'next' of the insertAfter
newElement->next = insertAfter->next;
// now insert the new element immediately after the 'insertAfter'
insertAfter->next = newElement;
}
// Taken from the original post...
// Of course, "addToFront" is no longer the correct name for this function,
// since it does no longer add the element to the front
void Queue::addToFront(...)
{
if (head==nullptr) {
// see original post above
} else {
// insert new element at the 2nd position in the queue,
// immediately behind the head
insert(temp, head);
}
}
如需进一步研究,您可以阅读链接列表,并查看std :: list界面。您可能希望使用shared_ptr / unique_ptr而不是使用 Node * 来改进代码。在现代C ++中,你几乎不会使用
Node *element=new Node();
这大部分时间都是错误的代码。自己管理指针和对象的生命周期是一个 邀请各种令人讨厌的问题(内存泄漏,访问违规, 浅层和深层复制问题,无法释放对象特别是在例外等之后...)。使用托管或智能指针可以让您的生活更轻松:
shared_ptr<Node> element(new Node());
// or even better
shared_ptr<Node> element=std::make_shared<Node>();
注意:&#34;托管/智能指针&#34;与C#/ C ++托管代码无关。这个名字简单地说有一个类(shared_ptr)可以进行某种自动管理并带走你的一些负担。