Java中如何仅当LinkedList只剩一个元素时打印?(约瑟夫问题场景)
判断约瑟夫问题中LinkedList仅剩一个元素的条件
嘿,这个需求实现起来超直接,你只需要利用LinkedList自带的size()方法判断元素数量就行,完全不用纠结元素本身的值。
核心判断逻辑
直接写一个基于ourList.size()的if语句,当大小等于1时执行打印操作:
if (ourList.size() == 1) { // 这里执行你的打印操作,比如打印最后剩下的元素 System.out.println("最后剩余的元素:" + ourList.getFirst()); }
结合迭代逻辑的注意点
- 一定要把这个判断放在元素移除操作之后,因为每次淘汰一个元素后,LinkedList的size才会变化,这时候检查才准确。
- 如果是在循环处理约瑟夫问题的淘汰流程,你可以在每次移除元素后立刻检查size,一旦满足条件就打印,甚至可以直接退出循环,避免做不必要的迭代。
完整代码示例(结合Iterator的约瑟夫问题逻辑)
import java.util.LinkedList; import java.util.Iterator; public class JosephusProblem { public static void main(String[] args) { LinkedList<Integer> ourList = new LinkedList<>(); // 初始化列表,比如加入1到10的测试元素 for (int i = 1; i <= 10; i++) { ourList.add(i); } Iterator<Integer> it = ourList.iterator(); int step = 3; // 约瑟夫问题的步长,每数到3淘汰一个元素 int count = 0; while (ourList.size() > 1) { if (it.hasNext()) { it.next(); count++; // 达到步长时移除当前元素 if (count == step) { it.remove(); count = 0; // 移除后立刻检查是否只剩一个元素 if (ourList.size() == 1) { System.out.println("最后剩余的元素是:" + ourList.getFirst()); } } } else { // 迭代器走到末尾,重置迭代器从头开始 it = ourList.iterator(); } } } }
这样写就能精准满足你的需求——只有当列表里只剩一个元素时才执行打印操作,完全基于列表大小判断,和元素值无关。
内容的提问来源于stack exchange,提问作者John Meff
相关产品推荐
相关产品推荐

