You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何仅当LinkedList只剩一个元素时打印?(约瑟夫问题场景)

判断约瑟夫问题中LinkedList仅剩一个元素的条件

嘿,这个需求实现起来超直接,你只需要利用LinkedList自带的size()方法判断元素数量就行,完全不用纠结元素本身的值。

核心判断逻辑

直接写一个基于ourList.size()的if语句,当大小等于1时执行打印操作:

if (ourList.size() == 1) {
    // 这里执行你的打印操作,比如打印最后剩下的元素
    System.out.println("最后剩余的元素:" + ourList.getFirst());
}

结合迭代逻辑的注意点

  1. 一定要把这个判断放在元素移除操作之后,因为每次淘汰一个元素后,LinkedList的size才会变化,这时候检查才准确。
  2. 如果是在循环处理约瑟夫问题的淘汰流程,你可以在每次移除元素后立刻检查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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:29:09