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

如何将带哨兵的泛型双向链表SLList元素转为字符串?

双向链表SLList的turntostring()方法修正实现

原turntostring()方法完全没实现链表元素的遍历逻辑,只是循环拼接循环变量的数值,根本无法输出链表中存储的实际数据。以下是正确的实现思路和代码:

实现思路

  • 利用哨兵节点的循环特性:双向链表的哨兵节点next指向第一个有效节点,最后一个有效节点的next会指向哨兵,以此作为遍历结束的标志
  • 使用StringBuilder拼接字符串(比直接用+=拼接效率更高,避免频繁创建字符串对象)
  • 遍历过程中取出每个节点的data,调用其toString()方法转换为字符串,同时处理data为null的情况

修正后的代码

public String turntostring() {
    // 用StringBuilder提升字符串拼接效率
    StringBuilder sb = new StringBuilder();
    sb.append("[");
    
    IntNode current = sentinel.next;
    // 遍历直到回到哨兵节点,循环链表的结束标志
    while (current != sentinel) {
        // 处理data为null的情况,避免空指针异常
        sb.append(current.data == null ? "null" : current.data.toString());
        // 仅在非最后一个节点后添加分隔符
        if (current.next != sentinel) {
            sb.append(", ");
        }
        current = current.next;
    }
    
    sb.append("]");
    return sb.toString();
}

代码细节说明

  1. 初始化StringBuilder并添加开头的[,让输出格式更直观(例如[元素1, 元素2, 元素3])
  2. 从sentinel.next开始遍历,因为哨兵本身不存储有效业务数据
  3. 循环条件current != sentinel:由于双向链表是循环结构,最后一个节点的next指向哨兵,当current回到哨兵时,遍历完成
  4. 增加data为null的判断,避免调用toString()时触发空指针异常
  5. 分隔符判断逻辑:只有当前节点的下一个节点不是哨兵时,才添加, ,避免最后一个元素后出现多余的分隔符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:10:29