Java使用ListIterator反转列表跳位打印字符串代码错误求助
Java列表遍历打印问题解决方案
需求确认
先明确核心执行逻辑:
- 第一阶段:正序遍历给定字符串列表,跳过每第2个元素(即取第1、3、5...位元素)
- 第二阶段:遍历原列表的反转序列,同样跳过每第2个元素
- 两阶段得到的字符串拼接后整行输出
示例验证:
输入["a","b","c","d"]:正序取a、c → "ac",反转序列是d、c、b、a,取d、b → "db",拼接后为"acdb",符合要求
输入["a","b","c"]:正序取a、c → "ac",反转序列是c、b、a,取c、a → "ca",拼接后为"acca",符合要求
现有代码核心问题
- 直接调用
remove()修改了输入的原列表,会破坏原始数据,也不符合需求逻辑 - 遍历条件
while(stringWithIterator.nextIndex() == 1)完全错误,只能遍历到索引为1的元素,无法处理完整列表 - 缺少逆序遍历、二次跳过第2个元素的逻辑,也没有做两阶段结果的拼接
实现思路
- 不要修改原输入列表,单独用
StringBuilder拼接输出结果,避免影响原数据同时提升拼接效率 - 第一阶段正序遍历列表,用计数器标记当前是第几个元素,奇数位元素追加到
StringBuilder - 第二阶段用
ListIterator实现逆序遍历:初始化迭代器时传入列表size作为起始位置,通过hasPrevious()和previous()方法倒序取元素,同样用计数器筛选奇数位元素追加到StringBuilder - 最后直接打印拼接完成的字符串即可
正确代码示例
import java.util.List; import java.util.ListIterator; public class ListPrintStrings { public static void printStrings(List<String> strings) { StringBuilder result = new StringBuilder(); // 第一阶段:正序遍历,跳过第2个元素 int count = 0; for (String s : strings) { count++; if (count % 2 == 1) { result.append(s); } } // 第二阶段:逆序遍历(等价于遍历反转后的列表),跳过第2个元素 count = 0; ListIterator<String> iterator = strings.listIterator(strings.size()); while (iterator.hasPrevious()) { count++; String current = iterator.previous(); if (count % 2 == 1) { result.append(current); } } // 输出最终结果 System.out.print(result.toString()); } }
代码验证
针对示例输入["a","b","c","d"]:
- 正序计数1:a→追加,2:b→跳过,3:c→追加,4:d→跳过 → 第一部分
"ac" - 逆序取元素顺序为d、c、b、a,计数1:d→追加,2:c→跳过,3:b→追加,4:a→跳过 → 第二部分
"db" - 拼接输出
"acdb",符合要求
针对示例输入["a","b","c"]:
- 正序计数1:a→追加,2:b→跳过,3:c→追加 → 第一部分
"ac" - 逆序取元素顺序为c、b、a,计数1:c→追加,2:b→跳过,3:a→追加 → 第二部分
"ca" - 拼接输出
"acca",符合要求
内容的提问来源于stack exchange,提问作者HY2000
相关产品推荐
相关产品推荐

