Java语言解决约瑟夫环问题(链表实现)

思想:将数据存储到一个链表中,此链表首尾相连形成一个环,删除指定的数即是删除相应的节点,直到链表为空为止。

代码如下:

先写一个节点类:

class Node {
  int data;
  Node next = null;
  public Node(int data)
  {
this.data = data;
  }
}

再写一个Circle类,此类有两个方法,add方法形成一个首尾相连的链表,存储数据;用delete方法来删除相应的节点,即删除相应的数

class Circle {
static Node head = null;
Node tail = null;
int n =0;
public  void add(int d)
{
Node newNode = new Node(d);
if(head==null)
{
head = newNode;
return;
}
Node tmp  = head;
while(tmp.next!=null&&n>1)
{
tmp =tmp.next;
}
tmp.next = newNode;
n--;
if(n==1)
{
tail = newNode;
newNode.next = head;
}
}
public void delete(int m)
{
if(m==1)
{
System.out.println(head.data);
head = head.next;
tail.next=head;
}
else
{
int i =2;
Node preNode = head;
Node curNode = preNode.next;
while(i!=m)
{
preNode = curNode;
curNode = curNode.next;
i++;
}
preNode.next = curNode.next;
head = curNode.next;
System.out.println(curNode.data);
}
}
}

最后test类完成测试

public  class Test {


public static void main(String[] args) {
// TODO Auto-generated method stub
Circle circle = new Circle();
int a =10;                             
int b =10;
circle.n =10;
for(int i =1;i<=a;i++)
{
circle.add(i);
}
while(a>0)
{
circle.delete(b);
a--;
}
}
}

运行结果:

10
1
3
6
2
9
5
7
4
8

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值