如何正确统计栈中节点?我的区间节点计数循环漏统计末节点
问题分析与修复方案
嘿,我一眼就瞅出问题在哪了——你的循环条件把栈的最后一个节点给直接跳过啦!
咱们来拆解下你的代码逻辑:当前的for循环判断条件是node.link != null,这意味着只有当当前节点存在下一个节点时,才会执行循环里的统计操作。但栈的最后一个节点,它的link字段必然是null对吧?所以这个节点根本没机会进入循环体,自然就没被统计到。
给你两种修复方案,推荐第一种:
方案一:修改循环条件,遍历所有节点
直接把循环条件改成node != null,这样从栈顶开始,每个节点都会被检查到,直到遍历完所有节点:
public int intervalNumbers() { int counter = 0; Node node; // 遍历所有节点,直到node为null(所有节点都处理完) for (node = top; node != null; node = node.link) { if (node.data >= -10 && node.data <= 10) { counter++; } } return counter; }
方案二:循环后单独检查最后一个节点(不推荐)
如果非要保留原来的循环结构,可以在循环结束后,单独对最后一个节点做判断(记得加空指针防护,避免栈为空时出错):
public int intervalNumbers() { int counter = 0; Node node; for (node = top; node.link != null; node = node.link) { if (node.data >= -10 && node.data <= 10) { counter++; } } // 循环结束后,node指向最后一个节点,单独检查 if (node != null && node.data >= -10 && node.data <= 10) { counter++; } return counter; }
显然第一种方案更简洁可靠,它能完美处理所有边界情况——比如栈为空、栈只有一个节点的场景,都不会出问题。
内容的提问来源于stack exchange,提问作者Eddie Rukmanis
相关产品推荐
相关产品推荐

