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

自定义Queue问题求助:入队1,9,9,6出队结果异常

嘿,我太懂这种卡壳又不甘心放弃的感觉了!咱们来掰扯下你自定义Queue出队顺序乱掉的问题——入队1、9、9、6,结果出队变成1、6、9、9,明显后面三个元素的顺序完全反了,大概率是你入队操作的逻辑写错了!毕竟Queue的核心是先进先出(FIFO),新元素必须乖乖加到队尾,出队从队头取,我给你列几个新手最容易踩的坑:

最可能的错误原因

1. 链表实现时,把新元素加到了队头而非队尾

如果是用链表来实现Queue,正常入队的逻辑应该是:找到当前的尾节点,把新节点挂在它后面,然后更新尾指针指向新节点。但要是你不小心和Stack的push逻辑搞混了,把新节点插到了队头,那入队9、9、6之后,链表的实际顺序会变成6→9→9→1,出队从队头取的话,自然就是1、6、9、9,刚好和你遇到的情况一模一样!

给你贴个正确的链表入队示例(Java为例,其他语言逻辑通用):

public void enqueue(int val) {
    Node newNode = new Node(val);
    if (isEmpty()) {
        head = newNode;
        tail = newNode;
    } else {
        tail.next = newNode; // 让当前尾节点指向新节点
        tail = newNode; // 更新尾指针到新节点
    }
}

你可以检查下自己的代码,是不是把新节点的next指向了头节点,还更新了头指针?那肯定就错啦!

2. 数组实现时,入队的索引计算搞反了

如果是用数组做循环队列,入队时应该把元素放到(tail + 1) % capacity的位置,然后更新tail指针。要是你不小心搞反了方向——比如每次往数组的头部塞元素,出队却从尾部取,那顺序直接就乱套了。

举个简单的例子:假设数组初始是空的,你入队1放在索引0,然后入队9的时候放到了索引-1(循环到数组末尾),接着入队9又往前放,最后入队6放到了索引1,那数组里的元素顺序就变成了[1,6,9,9],出队从索引0开始取,就是你看到的结果。

3. 尾指针更新不及时

还有一种可能:链表实现时,你找到了尾节点,把新节点挂上去了,但忘了更新尾指针!比如入队第一个9的时候,尾指针还在1的位置,入队第二个9的时候,又把它挂到了1的后面,把之前的9给覆盖了?不过这种情况出队顺序会是1、9、6,和你的情况不太对,但也可以顺手排查下。

总的来说,最可能的就是第一种情况——把入队的位置搞反了,你先对照自己的入队代码看看,应该很快就能找到问题!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:37:54