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

Java链式队列(Linked Queue)入队异常问题排查求助

LinkedQueue入队方法异常问题解决方案

我实现了QueueInterface接口的LinkedQueue.java类,执行enqueue(入队)操作时出现异常:第一个入队值被“忽略”,第二个入队操作实际入队第一个值,第三个入队操作入队第二个值,第四个入队操作入队第三个值,最终第四个值从未被入队。

测试代码

public class QueueTest3
{   public static void main(String[] args)
    {   QueueInterface<Integer> queue = new LinkedQueue<Integer>();
        
        //use enqueue method
        System.out.println("\nenqueuing -1");
        queue.enqueue(-1);
        queue.display();
        System.out.println("\nenqueuing 0");
        queue.enqueue(0);
        queue.display();
        System.out.println("\nenqueuing 1");
        queue.enqueue(1);
        queue.display();
        System.out.println("\nenqueuing 5");
        queue.enqueue(5);
        queue.display();
        
        while (!(queue.isEmpty()))
        {  //remove head element
           int removedItem = queue.dequeue();
           System.out.printf("%n%d dequeued%n", removedItem);
           queue.display();
        }
    }
}

原入队方法代码

public void enqueue(T newEntry)
{ 
    Node newNode = new Node(newEntry, null);

    if (lastNode == null){
      firstNode = lastNode = newNode;
      return;
    }
    lastNode.setNextNode(newNode);
    lastNode = newNode;
    numNodes++;
}

问题分析

异常核心原因是numNodes计数逻辑错误:

  • 队列初始为空时,添加第一个元素仅完成了firstNode和lastNode的赋值,未对numNodes执行自增操作。
  • 后续元素入队时才执行numNodes++,导致队列实际元素数量始终比numNodes统计值多1,直接影响依赖numNodes的方法(如display、isEmpty),引发显示错位、最后一个元素无法正常入队的问题。

修复方案

调整enqueue方法,确保所有入队场景都更新numNodes:

public void enqueue(T newEntry) { 
    Node newNode = new Node(newEntry, null);

    if (lastNode == null) {
        firstNode = lastNode = newNode;
    } else {
        lastNode.setNextNode(newNode);
        lastNode = newNode;
    }
    // 将计数操作移到条件判断外,保证每次入队都更新元素数量
    numNodes++;
}

修复说明

把numNodes++移出else分支,无论队列是否为空,每添加一个元素都执行计数自增,让队列的元素计数与实际数量保持一致,后续display、dequeue等操作即可正常执行,解决元素入队错位和丢失的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:30:41