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
相关产品推荐
相关产品推荐

