标签:getNext Josepfu helper 单向 约瑟夫 Person id public first
思路:
核心代码:
public class CircleSingleLinkedList {
private Person first = null;// 第一个节点
// 创建一个单项循环列表
public void add(int nums){
// 校验一下数据是否合理
if(nums < 1){
System.out.println("输入的数据不合理。。");
return;
}
Person cur = null;// 辅助指针,指向当前的节点
// 创建节点
for (int i = 1; i <= nums ; i++) {
// 创建节点
Person person = new Person(i);
// 判断节点是否是第一个节点
if(i == 1) {
// 添加节点
first = person;
first.setNext(person);// 构成环
cur = first;// 指向当前指针
}else {
cur.setNext(person);// 将cur的指向刚刚创建的节点
person.setNext(first);// 将刚刚创建的节点的next指向第一个节点
cur = person;// 将cur的指针向后移一位
}
}
}
// 遍历所有的节点
public void show() {
// 判断是否为空
if(first == null){
System.out.println("链表为空。。。");
return;
}
Person cur = first;
while(true){
System.out.println("编号:"+cur);
if (cur.getNext() == first) {
break;// 遍历完毕
}
cur = cur.getNext();// cur指向下一个节点
}
}
// 出圈
/*
* startNo : 开始的编号
* countNum : 隔几个输出一次
* nums : 一共有几个
*/
public void leave(int startNo,int countNum,int nums){
if(first == null || startNo > nums || nums < 1) {// 判断是否合法
System.out.println("参数出入有误");
return;
}
// 将helper指针放在first之前
Person helper = first;
for (int i = 0; i < nums ; i++) {
if(helper.getNext() == first){// 已经找到位置了
break;
}
helper = helper.getNext();
}
// 将first和helper移动到指定的位置上去 -- 根据用户输出入的startNo来确定的
for (int i = 0; i < startNo -1; i++) {
first = first.getNext();
helper = helper.getNext();
}
// 根据countNum来让出圈
while(true) {
if(helper == first){// 圈中只有一个节点
break;
}
for (int i = 0; i < countNum - 1; i++) {// 每次循环都是要确定出圈的节点 first即为要出圈的节点
first = first.getNext();
helper = helper.getNext();
}
// 出圈
System.out.printf("出圈的节点序号:%d\n",first.id);
first = first.getNext();
helper.setNext(first);
}
// 以上的出圈会留下最后一位
System.out.printf("最后一位节点的序号:%d\n",first.id);
}
}
节点:
public class Person {
public int id;
public Person next;
public Person(int id) {
this.id = id;
}
public Person getNext() {
return next;
}
public void setNext(Person next) {
this.next = next;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
'}';
}
}
测试:
public static void main(String[] args) {
CircleSingleLinkedList linkedList = new CircleSingleLinkedList();
linkedList.add(125);
linkedList.show();
linkedList.leave(1,21,125);
}
标签:getNext,Josepfu,helper,单向,约瑟夫,Person,id,public,first 来源: https://blog.csdn.net/new_buff_007/article/details/98632743
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。