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

如何修正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,"

代码说明

  1. 单词收集与入栈:遍历字符串逐个字符收集成单词,遇到空格时将单词推入栈并重置word;循环结束后处理最后一个无空格结尾的单词
  2. 出栈拼接:从栈顶依次弹出单词,拼接成反转句子,仅在单词间添加空格,避免末尾多余空格
  3. 边界处理:过滤空字符串入栈,保证输入含连续空格时输出格式仍正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:39:57