【发布时间】:2025-12-22 14:55:10
【问题描述】:
如果您有一个使用链表实现的先进先出队列,那么弹出具有最高值的节点的最有效方法是什么?
合并排序将是 O(n log n)。 扫描列表将是 O(n)。
任何人都可以提出更有效的方法吗?
队列必须保留fifo排序,它与enqueue和dequeue以通常的方式操作,但有一个额外的方法,例如popMax,它弹出并返回具有最高值的节点。
不需要代码,只需一些想法!谢谢!
【问题讨论】:
-
“需要节点代码” 不,你先展示你的。我们不是代码编写服务!
-
您可能有两个列表,一个用于fifo,一个用于max。
-
定义最高效的含义。时间还是空间?最终答案取决于您将如何使用它。
-
对于基本的需求组合(这在我的职业生涯中经常出现),我总是编写自己的节点指针优先级队列(堆),并有一个节点成员来保存堆的索引位置。然后可以访问任一结构以选择要从两者中删除的项目。
-
@Jarod42,两个列表毫无意义,您正在增加复杂性和存储空间,不是为了节省任何时间,而是将时间从
popMax转移到enqueue
标签: c++ linked-list queue max