如何修正JavaScript中基于栈实现句子反转的错误代码?
用栈实现句子反转的代码修正
原代码的问题
- 第一次处理完单词就执行
return stack.push(word),直接终止函数,仅第一个单词入栈就退出,无法处理后续内容 - 出栈循环条件逻辑颠倒:
while(!stack.length)是栈为空时执行,实际需要栈不为空时出栈 - 出栈时用
return只会返回第一个弹出的单词,无法拼接成完整反转句子 - 最后一个无空格结尾的单词没有被推入栈中
修正后的代码
function reverseSentence(S) { let stack = []; let word = ""; for (let i = 0; i < S.length; i++) { // 收集当前单词的字符 while (S[i] !== ' ' && i < S.length) { word += S[i]; i++; } // 将收集到的单词入栈,避免空字符串入栈 if (word) { stack.push(word); word = ""; // 重置word,准备收集下一个单词 } } // 处理最后一个没有空格结尾的单词 if (word) { stack.push(word); } let reversedSentence = ""; // 栈不为空时,依次弹出单词并拼接 while (stack.length) { reversedSentence += stack.pop(); // 非最后一个单词时添加空格 if (stack.length) { reversedSentence += " "; } } return reversedSentence; } console.log(reverseSentence("Hey, how are you doing?")); // 输出: "doing? you are how Hey,"
代码说明
- 单词收集与入栈:遍历字符串逐个字符收集成单词,遇到空格时将单词推入栈并重置
word;循环结束后处理最后一个无空格结尾的单词 - 出栈拼接:从栈顶依次弹出单词,拼接成反转句子,仅在单词间添加空格,避免末尾多余空格
- 边界处理:过滤空字符串入栈,保证输入含连续空格时输出格式仍正确
内容的提问来源于stack exchange,提问作者Sougata Mukherjee
相关产品推荐
相关产品推荐

