从堆栈 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.
希望这能说明问题。
我有两个函数可以在单链表堆栈中 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.
希望这能说明问题。