C#队列Enqueue、Dequeue方法Visual Studio单元测试不通过排查
问题排查与修复方案
核心错误原因
- Enqueue方法逻辑完全不符合队列「尾部入队」的规则,且没有维护
Count计数- 空队列初始化时错误给
_tail.Next赋值为当前节点,形成环形引用,导致节点无法正常遍历 - 非空入队逻辑错误:新节点赋值后没有更新尾节点指针,反而让尾节点指向自身,新增节点根本没有接入链表
- 整个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
相关产品推荐
相关产品推荐

