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

Java中使用do while循环反转循环链表的实现及问题排查

问题根源

你的代码存在两处逻辑错误:

  • do-while循环内先移动指针再拼接内容,初始current指向头节点head,第一次直接移动到current.prev后才开始输出,丢失了本应第一个输出的尾节点
  • 终止条件设置为current != head,由于你是先拼接再判断终止,当current移动回head时,仍然会先拼接一次head再退出循环,所以最终输出末尾多了一个重复的头节点

修复后代码

public void reverse() {
        String result = " ";
        Node current = head;
        if (current != null) {
            // 先定位到反转遍历的起点:原链表的尾节点(head的前驱节点)
            current = current.prev;
            // 标记起点,后续回到起点就终止循环
            Node start = current;
            do {
                // 先拼接当前节点,再移动指针
                result += current + ", ";
                current = current.prev;
            } while (current != start);
        } else {
            result += "EMPTY";
        }
        // 如果需要去掉末尾多余的逗号,可以自行添加字符串截断逻辑
        System.out.println(result);
    }

补充说明

如果你对结果里末尾多余的逗号有要求,可以改用StringBuilder拼接内容,循环结束后删除最后两位的逗号和空格即可,性能也比直接用String拼接更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:36:01