You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术问询:如何优化队列镜像函数实现原序+逆序拼接输出

解决队列镜像:实现原序+逆序拼接的方法

嘿,我来帮你搞定这个队列镜像的问题!你的现有代码只是把队列里的元素依次出队再重新入队,所以队列内容和原来完全一致,并没有实现「原序排列后拼接逆序元素」的需求。下面给你两种可行的解决方案:

方法一:用临时列表保存原元素(无需栈)

这种方法思路简单,先备份原队列的所有元素,再分别把原序和逆序元素入队:

def mirror_queue(orig_queue):
    # 先把原队列所有元素出队,保存到临时列表
    temp_list = []
    # 假设队列有is_empty()方法判断是否为空;如果没有,可改用 len(orig_queue.items) > 0
    while not orig_queue.is_empty():
        temp_list.append(orig_queue.dequeue())
    
    # 第一步:重新入队原元素,恢复原队列的原序
    for item in temp_list:
        orig_queue.enqueue(item)
    
    # 第二步:把临时列表逆序后入队,实现逆序拼接
    for item in reversed(temp_list):
        orig_queue.enqueue(item)

逻辑说明:

  1. 先清空原队列并保存所有元素到temp_list,这样我们同时拿到了原队列的完整元素顺序;
  2. 把temp_list的元素重新入队,让队列回到初始的原序状态;
  3. 用reversed()遍历temp_list,把逆序的元素逐个入队,最终队列就变成「原序+逆序」的组合。

方法二:用栈辅助实现逆序(利用栈的后进先出特性)

如果必须使用你提到的my_stack_module,可以用栈来完成元素反转:

import my_stack_module

def mirror_queue(orig_queue):
    backup_stack = my_stack_module.Stack()
    temp_list = []
    
    # 把原队列元素出队,同时存入临时列表和栈
    while not orig_queue.is_empty():
        item = orig_queue.dequeue()
        temp_list.append(item)
        backup_stack.push(item)
    
    # 恢复原队列的原序
    for item in temp_list:
        orig_queue.enqueue(item)
    
    # 弹出栈中元素并入队,栈的弹出顺序就是原队列的逆序
    while not backup_stack.is_empty():
        orig_queue.enqueue(backup_stack.pop())

逻辑说明:

  1. 栈的「后进先出」特性刚好可以帮我们反转元素顺序,所以先把原队列元素全部存入栈和临时列表;
  2. 临时列表用来恢复原队列的原序;
  3. 逐个弹出栈中的元素并加入队列,这些元素就是原队列的逆序,最终实现拼接效果。

关于你之前尝试的.reverse()方法

你之前用.reverse()只得到逆序队列,是因为你直接修改了原队列的元素顺序,没有先保留原序部分。上面两种方法都是先确保原序元素完整保留,再添加逆序元素,所以能满足输入[1,2,3]输出[1,2,3,3,2,1]的需求。

内容的提问来源于stack exchange,提问作者mini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:38:01