java用链表解约瑟夫环问题

本文介绍了一个通过编程实现的有趣数学问题解决方案:将1到20的整数围成一个圆圈,按规则每隔两个数取出一个,直至所有数被取出。详细展示了使用自定义链表节点进行操作的过程及最终输出的数的顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1到20的数围成一个圈,隔两个取出一个,直到所有的数都被取出为止,求取出的数的顺序:

package org.joseff.test;

public class Link {
private int value;
private Link next;
private Link previous;

public Link getPrevious() {
return previous;
}

public void setPrevious(Link previous) {
this.previous = previous;
}

public Link(int value){
this.value = value;
}

public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public Link getNext() {
return next;
}
public void setNext(Link next) {
this.next = next;
}

public Link remove(){
System.out.println(this.getValue());
Link p = this.getPrevious();
Link n = this.getNext();
p.setNext(n);
n.setPrevious(p);
return n;
}

}


package org.joseff.test;

public class Test {

public static void main(String[] args) {
//initialize the link nodes.
Link t1 = new Link(1);
Link first = t1;
for(int i = 2 ; i <= 20 ; i++ ){
Link link = new Link(i);
t1.setNext(link);
link.setPrevious(t1);
t1 = link;
}
t1.setNext(first);
first.setPrevious(t1);
print(first);
}

public static void print(Link link){
//left the last node
if(link.getNext() == link){
System.out.println(link.getValue() + " ");
return;
}
Link tmp = link;
for(int i = 1 ; i < 3 ; i++ ){
tmp = tmp.getNext();
}
Link n = tmp.remove();
print(n);
}

}

结果:3 、6 、9 、12 、15 、18 、1 、5 、10 、14 、19 、4 、11 、17 、7 、16 
、8 、2 、13 、20
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值