修改堆栈顶部而无需访问StackType对象

时间:2011-09-14 15:19:57

标签: c++ pointers stack

我对之前被问过的问题有一定的疑问。

我被赋予了这个函数原型void StackPop(NodeType *Top),并被告知修改堆栈顶部而无需访问堆栈对象。这里的StackPop函数是一个全局函数,而不是Stack类的成员函数。弹出后,Top应该指向Top元素的新值。

作为一种解决方案,只有在调用时将堆栈顶部节点的地址传递给函数时,才能在这种情况下弹出堆栈顶部。例如:StackPop(&address); 修改堆栈顶部

NodeType* temp;
temp = top;
*top = (*top)->next;
delete temp;

这是问题的简单答案,还是需要处理的其他情况?

1 个答案:

答案 0 :(得分:0)

是的,这是一个有效的简单答案,有三点需要注意:

  1. temp = top应阅读temp = *top;
  2. 您可能希望优雅地处理*top为NULL的情况(而不仅仅是取消引用NULL指针);
  3. 这个解决方案当然与你给出[void StackPop(Node *Top)]的原型不兼容,因为它需要Node**作为其论据。
  4. 我唯一的另一个评论是StackPop听起来应该是成员函数而不是自由函数。