首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java实现循环列表,解决约瑟夫环有关问题

2012-10-18 
Java实现循环列表,解决约瑟夫环问题约瑟夫环:共有n个人围成一圈,从1开始报数,数到m的人出圈,求最后幸运者

Java实现循环列表,解决约瑟夫环问题

约瑟夫环:共有n个人围成一圈,从1开始报数,数到m的人出圈,求最后幸运者序号??

下面用java实现循环列表解决这个问题:

package com.iteye.ljmdbc7a;import java.util.Scanner;/** * 循环列表的Java实现,解决约瑟夫环问题 * @author LIU * */public class LinkedList{//定义结点,必须是staticstatic class Node{int data;Node next;Node(int arg1){this.data = arg1;}}public static void main(String[] args){int n = 0,m = 0;//定义总人数n,和出圈数字m//输入n和mSystem.out.println("输入总人数n,出圈数字m");Scanner scanner = new Scanner(System.in);n = scanner.nextInt();m = scanner.nextInt();//初始化循环列表,头结点first和尾结点pNode first = new Node(1);first.next = first;Node p = first;for(int i=2; i<=n; i++){Node temp = new Node(i);temp.next = p;p.next = temp;p = p.next;}p.next = first;//尾接头形成循环链表(p为尾结点)//执行出圈操作System.out.println("出圈顺序为:");while(p != p.next){//下面for循环后,p是第m个结点的前一个结点for(int i=1; i<m; i++)p = p.next;//删除第m个结点System.out.print(p.next.data+" ");p.next = p.next.next;}System.out.print("\n幸运者是:"+p.data);}}
?注意42行->>>>p.next = first;//尾接头形成循环链表(p为尾结点)

热点排行