用Java创建一个循环链表例子
2017-11-15 20:01
302 查看
题目:一群人围在一起丢手绢,开始指定从第m个人开始,然后瞬时针数k下,第k个人出列,剩下的人继续从0开始数到k,第k个人再次出列,问,最后一个人是谁?
代码如下:
package com.cyclink;
public class CycLink {
public static void main(String[] args) {
// TODO Auto-generated method stub
Link cyc = new Link();
cyc.setLen(5);
cyc.createLink();
cyc.setK(2);
cyc.setM(2);
cyc.print();
cyc.play();
}
}
//创建一个节点类
class Node
{
//编号
public int num;
//保存下一个节点
Node next;
//默认构造函数
public Node() {}
//构造函数
public Node(int num)
{
this.num = num;
}
}
//创建一个循环链表
class Link
{
//保存链表的长度
public int len = 0;
//保存游戏从第k个人开始
public int k = 0;
//保存游戏数多少下
public int m = 0;
//设置一个头节点
Node head = new Node(0);
//设置一个临时节点
Node temp = null;
//设置链表长度
public void setLen(int len)
{
this.len = len;
}
//设置k的值
public void setK(int k)
{
this.k = k;
}
//m
public void setM(int m)
{
this.m = m;
}
//生成循环链表
public void createLink()
{
for(int i = 1;i <= len;i++)
{
if(i == 1)
{
Node node = new Node(i);
head.next = node;
temp = node;
}
else if(i < len)
{
Node node = new Node(i);
temp.next = node;
temp = node;
}
else
{
Node node = new Node(i);
temp.next = node;
node.next = head;
}
}
}
//开始玩游戏
public void play()
{
//临时节点置空
temp = null;
//用temp1存放temp之前一个节点
Node temp1 = null;
temp = head.next;
temp1 = head;
//找到第k个人的位置
for(int i = 1;i < k;i++)
{
temp = temp.next;
temp1 = temp1.next;
}
//数多少下
while(len == 1)
{
for(int j = 1;j < m;j++)
{
temp = temp.next;
temp1 = temp1.next;
}
//删除temp节点
temp1.next = temp.next;
//链表长度减1
len--;
}
//输出结果
System.out.println("\n" + "最后一个数为:" + temp.num);
}
//输出循环链表
public void print()
{
temp = null;
temp = head.next;
while(temp != head)
{
//输出该节点的编号
System.out.print(temp.num + "\t");
temp = temp.next;
}
}
}
代码如下:
package com.cyclink;
public class CycLink {
public static void main(String[] args) {
// TODO Auto-generated method stub
Link cyc = new Link();
cyc.setLen(5);
cyc.createLink();
cyc.setK(2);
cyc.setM(2);
cyc.print();
cyc.play();
}
}
//创建一个节点类
class Node
{
//编号
public int num;
//保存下一个节点
Node next;
//默认构造函数
public Node() {}
//构造函数
public Node(int num)
{
this.num = num;
}
}
//创建一个循环链表
class Link
{
//保存链表的长度
public int len = 0;
//保存游戏从第k个人开始
public int k = 0;
//保存游戏数多少下
public int m = 0;
//设置一个头节点
Node head = new Node(0);
//设置一个临时节点
Node temp = null;
//设置链表长度
public void setLen(int len)
{
this.len = len;
}
//设置k的值
public void setK(int k)
{
this.k = k;
}
//m
public void setM(int m)
{
this.m = m;
}
//生成循环链表
public void createLink()
{
for(int i = 1;i <= len;i++)
{
if(i == 1)
{
Node node = new Node(i);
head.next = node;
temp = node;
}
else if(i < len)
{
Node node = new Node(i);
temp.next = node;
temp = node;
}
else
{
Node node = new Node(i);
temp.next = node;
node.next = head;
}
}
}
//开始玩游戏
public void play()
{
//临时节点置空
temp = null;
//用temp1存放temp之前一个节点
Node temp1 = null;
temp = head.next;
temp1 = head;
//找到第k个人的位置
for(int i = 1;i < k;i++)
{
temp = temp.next;
temp1 = temp1.next;
}
//数多少下
while(len == 1)
{
for(int j = 1;j < m;j++)
{
temp = temp.next;
temp1 = temp1.next;
}
//删除temp节点
temp1.next = temp.next;
//链表长度减1
len--;
}
//输出结果
System.out.println("\n" + "最后一个数为:" + temp.num);
}
//输出循环链表
public void print()
{
temp = null;
temp = head.next;
while(temp != head)
{
//输出该节点的编号
System.out.print(temp.num + "\t");
temp = temp.next;
}
}
}
相关文章推荐
- 四、创建一个可复用的循环链表
- JAVA 循环在一个数字前面填充0.小例子
- 结合网上内容,分享一个,java用for循环创建i个对象,的方法
- Java 小例子:创建一个可拖拽图片的面板
- 删除一个单项链表的最中间的元素,要求时间尽可能短(不能使用两次循环)java
- Java 小例子:创建一个可拖拽图片的面板
- 自己写的一个有序链表的例子(Java)
- 创建一个双向链表或双向循环链表
- 一个建立双向循环链表的例子
- Java中一个for语句导致无穷大死循环的例子
- 创建一个双向链表或双向循环链表
- 一个深入理解JAVA传统线程对象创建的例子
- 创建一个双向链表或双向循环链表
- 多线程(6): Java Threads例子的一个问题
- 使用JSP + JAVABEAN + XML 开发的一个例子
- MascotWorld例子:创建一个场景,添加物体并畅游世界
- 用单循环链表存储一个环上的数据,并计算任意两个相邻元素之差是否超过2
- 用java接收lotus邮件一个完整例子
- 译:Apache Maven-简化java的构建过程--比apache ant更多(2) 创建一个简单的maven项目
- 用JAVA操作WORD的一个例子