如何将带哨兵的泛型双向链表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(); }
代码细节说明
- 初始化
StringBuilder并添加开头的[,让输出格式更直观(例如[元素1, 元素2, 元素3]) - 从
sentinel.next开始遍历,因为哨兵本身不存储有效业务数据 - 循环条件
current != sentinel:由于双向链表是循环结构,最后一个节点的next指向哨兵,当current回到哨兵时,遍历完成 - 增加
data为null的判断,避免调用toString()时触发空指针异常 - 分隔符判断逻辑:只有当前节点的下一个节点不是哨兵时,才添加
,,避免最后一个元素后出现多余的分隔符
内容的提问来源于stack exchange,提问作者user18984687
相关产品推荐
相关产品推荐

