【问题标题】:Pop from a Single Linked List Implementation of a Stack C++从堆栈 C++ 的单链表实现中弹出
【发布时间】:2015-07-27 23:44:01
【问题描述】:
我有两个函数可以在单链表堆栈中弹出()。但无法弄清楚为什么一个比另一个更正确。
POP1:
X = head;
head = head->getNext();
return X;
POP2:
head = head->getNext();
X = head;
return X;
我的答案是 POP1,但我不确定为什么 POP2 会不正确。感谢您能给我的任何帮助。
【问题讨论】:
标签:
c++
linked-list
stack
【解决方案1】:
因为在 POP2 中,您从堆栈顶部移除项目,将其丢弃(即不返回它),然后返回当前堆栈顶部(实际上是您开始时的第二个项目)。
【解决方案2】:
假设列表看起来像
A -> B -> C -> D -> NULL此时head=A
因此,功能应该从列表中删除并返回A。让我们看看 POP1 和 POP2 在做什么。
POP1:
X = A;
head = B;
return A;
此时列表看起来像B -> C -> D -> NULL,头部指向B。返回值是A。一切看起来都很好。
POP2:
head = B;
X = B;
return B;
此时列表看起来像B -> C -> D -> NULL,头部也指向B。但是等等!它返回 B 而不是 A。
希望这可以澄清。