`
shuiguaiQQ
  • 浏览: 14440 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

java实现n个小孩围圈数m退1问题(单链)

    博客分类:
  • Java
阅读更多

转载请注明出处:http://shuiguaiqq.iteye.com/blog/2065943

n个人围一圈报数,数到m的人退出,直到最后只剩一个人。

问题也就不详细描述了,百度一搜一大堆,以前看过马士兵的视频,里面讲到过用的好像类似双链,有left和right的,我自己也实现过,但是搞来搞去容易让看代码的看晕,数组实现也搞过,感觉也不够直观,我比较喜欢结构逻辑清晰的代码,所以感觉还是单链清爽点,代码如下:

/**
 * n个人围一圈报数,数到m的人退出,直到最后只剩一个人
 */
public class CountQuit {
    static final int N = 500;
    static final int M = 3;
    static int remainPeople;
    static Node root = null;
    static {
        createCircle();
    }

    public static void main(String[] args) {
        startGrame();
    }

    public static void startGrame() {
        Node start = root;
        int count = 1;
        while (remainPeople > 1) {
            if (count == CountQuit.M - 1) {
                count = 0;
                start.setNext(start.getNext().getNext());
                remainPeople--;
            }
            start = start.getNext();
            count++;
        }
        System.out.println("最后剩下的小孩编号为:"+start.getCode());
    }

    public static void createCircle() {
        Node temp = null;
        for (int i = 0; i < CountQuit.N; i++) {
            if (i == 0) {
                root = new Node(i + 1);
                temp = root;
            } else {
                temp.setNext(new Node(i + 1));
                temp = temp.getNext();
                if (i == CountQuit.N - 1) {
                    temp.setNext(root);
                }
            }
        }
        remainPeople = CountQuit.N;
    }

}

class Node {
    private int code;
    Node next;

    public Node(int code) {
        this.code = code;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }

}

 

1
2
分享到:
评论

相关推荐

    Java实现单链表以及单链表的操作.zip

    在Java中,我们可以创建一个名为`Node`的类来表示链表的节点,其中包含一个`data`字段存储数据和一个`next`字段指向下一个节点。例如: ```java public class Node { int data; Node next; public Node(int ...

    java实现约瑟夫环问题Josephus

    java实现约瑟夫环问题Josephus 约瑟夫问题 * 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k(1,2,3...n)的人开始报数,数到m(1,2,3...)的那个人出列; * 他的下一个人又从1开始报数,...

    java实现单链表

    在这个主题中,我们将深入探讨如何使用Java来实现单链表,特别是关注如何插入元素以及如何构建链表。 单链表由一系列节点组成,每个节点包含两部分:数据元素和指向下一个节点的引用。在Java中,我们可以通过创建一...

    Java实现单链表的基本操作

    本文将深入探讨如何使用Java语言实现单链表的基本操作,包括创建链表、插入节点、删除节点以及遍历链表等关键功能。 首先,我们需要理解单链表的概念。单链表是一种线性数据结构,其中每个元素(称为节点)包含两个...

    线性表,单链表,栈 java实现

    下面将详细解释这些概念及其Java实现。 **线性表** 是一种基本的数据结构,它是由n(n&gt;=0)个相同类型元素构成的有限序列。线性表中的元素具有顺序关系,即每个元素都有一个前驱和后继,除了第一个元素没有前驱,...

    JAVA单链表操作实验

    在本实验中,我们将实现一个基于JAVA的单链表操作实验,该实验可以实现以下三个功能:1.根据从键盘输入一串字符串自动生成一个单链表;2.根据指定元素删除相应的结点,可以一次性删除多个结点;3.根据指定修改相应...

    基于JAVA的单链表简单实现

    单链表是数据结构中最基础的一种,它是一种线性数据结构,由一系列节点(也称为元素)组成,每个节点包含两个部分:数据域和指针域。数据域存储实际的数据,而指针域则指向链表中的下一个节点。在Java中,我们可以...

    java 单链表和双向链表的实现

    本话题主要探讨两种常用的数据结构——单链表和双向链表在Java中的实现,以及相关的操作,如在头部添加节点、在尾部添加节点、遍历、逆置和删除。 首先,我们来理解单链表和双向链表的基本概念。单链表是一种线性...

    单链表实现约瑟夫环

    单链表解决约瑟夫环问题

    Java单链表增删改查的实现

    在Java编程语言中,单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和指向下一个节点的引用。这个数据结构在处理动态数据集合时非常有用,因为它允许快速插入和删除操作。下面我们将详细...

    一个自己用java写的学生单链表的相关问题

    这个压缩包中的`studentlinklist.java`文件很可能包含了实现学生单链表的类,以及相关的操作方法。下面将详细介绍单链表及其在Java中的实现方式。 **单链表** 是一种线性数据结构,其中每个元素(节点)包含两个...

    Java单链表的实现代码

    本篇文章将深入探讨如何使用Java语言实现单链表,并对其基本操作进行详细阐述。 单链表是由一系列节点构成,每个节点包含两部分:数据元素(data)和指向下一个节点的引用(next)。在Java中,我们可以使用类来表示...

    O n 复杂度实现单链表的逆转

    一个C程序 实现了单链表的逆序 且复杂度为O n

    Java自己实现一个单链表

    本文将深入探讨如何使用Java语言自己实现一个单链表,包括其核心概念、基本操作以及相关的代码实现。 首先,我们要了解单链表的基本概念。单链表是由一系列节点构成的,每个节点包含两个部分:数据域,存储实际的...

    约瑟夫环的单链表实现

    问题的基本设定是:人们站成一个圈,从某个人开始按顺时针方向报数,每报到特定数值的人会被排除出圈,然后从下一个人继续报数,直到只剩下最后一个人为止。在单链表实现中,我们需要创建一个链表来代表人们,然后...

    用单链表实现两个数的相加

    用两个单链表实现两个大型整数的相加。。。。不限制两个数的位数,可以大于整数在计算机的存储

    java数据结构之单链表

    1. **创建**:在Java中,可以定义一个节点类来表示链表的节点,包含数据和指向下一个节点的引用。例如: ```java class Node { int data; Node next; public Node(int data) { this.data = data; this.next = ...

    java实现单链表.md

    java单链表

    单链表双向链表java实现

    在这个话题中,我们将深入探讨两种基本的线性数据结构——单链表和双向链表,并通过Java语言来实现它们。 单链表是一种线性数据结构,其中每个元素(称为节点)包含两个部分:数据域和指针域。数据域存储实际的数据...

Global site tag (gtag.js) - Google Analytics