从堆栈 C++ 的单链表实现中弹出

Pop from a Single Linked List Implementation of a Stack C++

我有两个函数可以在单链表堆栈中 pop() 。但是想不通为什么一个比另一个更正确。

POP1:
X = head;
head = head->getNext();
return X;

POP2:
head = head->getNext();
X = head;
return X;

我的答案是 POP1,但我不确定为什么 POP2 会不正确。感谢您能给我的任何帮助。

因为在 POP2 中,您从堆栈顶部移除项目,将其丢弃(即不要 return 它)然后您 return 当前堆栈顶部(实际上是你开始时的第二个项目)。

假设列表看起来像

A -> B -> C -> D -> NULL此时head=A

因此,功能应该从列表中删除 return A。让我们看看 POP1 和 POP2 在做什么。

POP1:

X = A;
head = B;
return A; 

此时列表看起来像 B -> C -> D -> NULL,头部指向 B。return 值是 A。一切看起来都不错。

POP2:

head = B;
X = B;
return B; 

此时列表看起来像 B -> C -> D -> NULL,头部也指向 B。但是等等!它 return 是 B 而不是 A.

希望这能说明问题。