You need to enable JavaScript to run this app. C#队列Enqueue、Dequeue方法Visual Studio单元测试不通过排查
优惠活动
大模型
产品
解决方案
定价
更多

C#队列Enqueue、Dequeue方法Visual Studio单元测试不通过排查

问题排查与修复方案

核心错误原因

  • Enqueue方法逻辑完全不符合队列「尾部入队」的规则,且没有维护Count计数
    1. 空队列初始化时错误给_tail.Next赋值为当前节点,形成环形引用,导致节点无法正常遍历
    2. 非空入队逻辑错误:新节点赋值后没有更新尾节点指针,反而让尾节点指向自身,新增节点根本没有接入链表
    3. 整个Enqueue方法没有执行Count++,计数一直处于0状态,后续逻辑判断完全错乱
  • Dequeue方法逻辑基本正确,但因为Enqueue写入的链表结构错误,导致每次取出的都是头节点的10,才会出现「预期20实际10」的报错

修复后的代码

修正后的Enqueue方法

public void Enqueue(T data)
{
    Node<T> node = new Node<T>();
    node.Data = data;
    node.Next = null; // 新节点默认后续为空

    if (Count == 0)
    {
        // 空队列时头尾都指向新节点
        _head = node;
        _tail = node;
    }
    else
    {
        // 原尾节点的后续指向新节点,再更新尾节点为新节点
        _tail.Next = node;
        _tail = node;
    }
    // 维护计数,必加
    Count++;
}

可选优化:Dequeue方法简化冗余变量

public T Dequeue()
{
    if (Count == 0)
    {
        throw new InvalidOperationException("You've taken it all...");
    }
    T temp = _head.Data;
    _head = _head.Next;
    Count--;
    if (Count == 0)
    {
        _tail = null;
    }
    return temp;
}

验证说明

修复后运行单元测试,入队[10,20,30,40,50]后,Dequeue会严格按照FIFO顺序返回对应值,即可通过断言校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 13:57:02