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

如何拼接栈中字符值并修改returnItems方法返回逆序字符序列

问题核心错误分析

你原有代码存在三个核心问题:

  • 用T类型的value变量做拼接容器,泛型直接做字符串拼接本身就有类型转换隐患,而且每次循环你都把value重新赋值为当前节点的字符,之前拼接的内容会直接被覆盖
  • 你原有标注的拼接行把temp.getLink()(下一个节点对象)直接拼进了结果,根本拿不到下一个节点存储的字符值
  • 循环终止条件逻辑有问题,当遍历到最后一个节点时,temp.getInfo()是有效值,但原有逻辑处理不完整

修改方案

方案1:调整返回值为String(推荐,适配你判断回文的使用场景)

你需要的就是拼接后的字符串做对比,不需要保留泛型返回,修改后代码如下:

public String returnItems() {
    Node<T> temp = top;
    // 用StringBuilder做拼接容器,避免字符串常量池冗余
    StringBuilder sb = new StringBuilder();

    if (top == null) {
        System.out.println("Stack is empty");
        return "";
    }

    System.out.println("Elements: ");
    while (temp != null) {
        // 直接把当前节点存储的字符拼进去
        sb.append(temp.getInfo());
        // 遍历到下一个节点
        temp = temp.getLink();
    }
    return sb.toString();
}

如果abcdef依次入栈,这个方法返回的就是你要的fedcba,直接和原字符串对比就能判断是否为回文。

方案2:保留原方法泛型返回值T的修改方式

如果不能改方法返回值定义,就修改拼接逻辑,最后强转为T:

public T returnItems() {
    Node<T> temp = top;
    StringBuilder sb = new StringBuilder();

    if (top == null) {
        System.out.println("Stack is empty");
        return null;
    }

    System.out.println("Elements: ");
    while (temp != null) {
        sb.append(temp.getInfo());
        temp = temp.getLink();
    }
    // 强转为泛型T,仅当你业务中T可以兼容字符串类型时可用
    return (T) sb.toString();
}

核心修改点说明

  • 删掉了你标注的错误拼接行,改用StringBuilder来累计所有节点的字符
  • 修正了循环逻辑,不需要单独判断下一个节点是否为空,只要当前节点不为空就处理,简化代码
  • 去掉了每次循环覆盖value的错误逻辑,所有字符依次追加到拼接容器里

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:39:03