
本文介绍在链表遍历打印过程中精准控制分隔符(如逗号)的通用技巧,重点解决“末尾多出一个逗号”的常见问题,提供简洁、健壮且面试友好的实现方案。
在链表遍历中,常见的错误模式是“先打印数据,再无条件打印逗号”,这会导致最后一个节点后仍输出逗号(如 10,20,30,40,50,),违反输出规范——尤其在算法面试或OJ判题中,这种格式差异会直接导致测试用例失败。
正确思路是:逗号应作为“当前节点与下一个节点之间的分隔符”,而非“当前节点的后缀”。因此,是否打印逗号,应取决于当前节点是否有后继节点。
以下是优化后的 printList 方法:
public static void printList(Node head) {
Node curr = head;
while (curr != null) {
System.out.print(curr.data);
if (curr.next != null) { // 仅当存在下一个节点时才打印逗号
System.out.print(",");
}
curr = curr.next;
}
}✅ 优势说明:
- 时间复杂度仍为 O(n),无额外开销;
- 空间复杂度 O(1),无需字符串拼接或缓冲;
- 逻辑清晰,边界处理自然(空链表、单节点链表均正确);
- 符合面试考察重点:对指针/引用关系的理解与条件判断的严谨性。
⚠️ 注意事项:
- 切勿使用 toString().replaceAll(",$", "") 等事后修正方式——低效且掩盖逻辑缺陷;
- 避免引入布尔标志位(如 first = true)或提前判断长度——增加冗余状态,降低可读性;
- 若需支持其他分隔符(如空格、分号)或前缀/后缀,该模式同样适用,只需调整条件分支内容。
总结:控制分隔符的关键在于将分隔动作绑定到“连接关系”而非“节点自身”。这一原则不仅适用于链表,也广泛适用于数组遍历、树的层序输出、CSV生成等场景,是编写健壮格式化输出代码的基础思维。










