我需要删除队列的最后一个元素。
我唯一可以使用的操作是
-
Peek()
- 获取第一个元素而不删除它
-
Enqueue(element)
- 向队列末尾插入一个元素
-
Dequeue()
- 删除第一个元素
-
IsEmpty()
- true 或 false 队列是否为空。
而且我不能使用数组或队列,元素的数量也无法获得。
我想到了一些解决方案,但每次我都陷入困境,因为我不知道如何判断当前元素是否是最后一个元素。
贾斯汀·比尔的解决方案 https://softwareengineering.stackexchange.com/questions/40271/remove-the-last-element-in-a-queue/40279#40279是更直接的。但我认为可以就地完成,无需创建另一个队列。
object RemoveLast(Queue q) {
object first = q.Peek();
object current = null;
while (true) {
current = q.Dequeue();
if (q.Peek() == first) {
break;
}
q.Enqueue(current);
}
return current;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)