单循环链表(基于java语言)
public class CircleSinglyLinkList {
private Node head;
CircleSinglyLinkList(){
this.head = null;
}
CircleSinglyLinkList(Node head){
this.head = head;
}
//向表头插入一个值为x的结点
public void insertHead(int x){
Node newNode = new Node(x);
if(this.head == null){
this.head = newNode;
newNode.next = this.head;
}else{
Node last = this.head;
newNode.next = this.head;
this.head = newNode;
while(last.next != newNode.next){
last = last.next;
}
last.next = this.head;
}
}
//向表尾插入一个值为x的结点
public void insertTail(int x){
Node newNode = new Node(x);
if(head == null){
this.head = newNode;
newNode.next = this.head;
}
else {
Node cur = this.head;
while(cur.next != this.head){
cur = cur.next;
}
newNode.next = this.head;
cur.next = newNode;
}
}
public void deleteData(int data){
Node cur = findNode(data);
Node last = this.head;
if(cur == null){
return;
}
if(cur == this.head){
while(last.next != this.head){
last = last.next;
}
this.head = cur.next;
last.next = this.head;
cur = null;
return ;
}
Node pre = head;
while(pre.next != cur){
pre = pre.next;
}
pre.next = pre.next.next;
cur = null;
}
public Node findNode(int data){
if(head == null){
System.out.println("链表为空");
return null;
}
Node cur = head;
while (cur.next != head && cur.value != data){
cur = cur.next;
}
return cur;
}
@Override
public String toString() {
Node cur = head;
String str = "";
StringBuilder newStr = new StringBuilder("");
while(cur.next != head){
newStr.append(cur.value+"--->");
cur = cur.next;
}
newStr.append(cur.value+"--->头");
return newStr.toString();
}
public static void main(String[] args) {
CircleSinglyLinkList circleSinglyLinkedList= new CircleSinglyLinkList();
// Josephus
int peopleNum = 10;
int each = 3;
int count = 1;
for (int i = 0; i < peopleNum; i++) {
circleSinglyLinkedList.insertTail(i+1);
}
// System.out.println(circleSinglyLinkedList.toString());
Node another = circleSinglyLinkedList.head;
Node pre = another;
while(true){
if(another.next == another){
break;
}
if(count%3 == 0){
pre = another.next;
circleSinglyLinkedList.deleteData(another.value);
count++;
another = pre;
System.out.println(circleSinglyLinkedList.toString());
}else{
another = another.next;
count++;
}
}
//// circleSinglyLinkedList.deleteData(0);
// circleSinglyLinkedList.deleteData(1);
// circleSinglyLinkedList.insertHead(1);
//// circleSinglyLinkedList.deleteData(1);
// circleSinglyLinkedList.insertTail(2);
//// System.out.println(circleSinglyLinkedList.findNode(1).value);
//// circleSinglyLinkedList.deleteData(1);
//// circleSinglyLinkedList.deleteData(90);
// circleSinglyLinkedList.deleteData(1);
// System.out.println(circleSinglyLinkedList.toString());
}
}
这个是java语言的实现,(我写的),没有写很多功能,但是基本的有了,可以实现那个算法了。注意的问题都在c语言里面解释了。
单循环链表(基于java语言)的更多相关文章
- 基于JAVA语言的多线程技术
1.简介 多线程技术属于操作系统范围内的知识: 进程与线程 可以这么理解,一个应用程序就是一个进程,在一个进程中包含至少一个线程:进程就是线程的容器,真正工作.处理任务的是线程. 进程是操作系统分配资 ...
- JFinal -基于Java 语言的MVC极速 web 开发框架
JFinal概述 JFinal 是基于Java 语言的极速 web 开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java语言所有优势的同时再 ...
- 基于Java语言开发jt808、jt809技术文章精华索引
很多技术开发人员喜欢追逐最新的技术,如Node.js, go等语言,这些语言只是解决了某一个方面,如只是擅长异步高并发等等,却在企业管理后台开发方面提供的支持非常不够,造成项目团队技术选项失败,开发后 ...
- 【数据结构】之链表(Java语言描述)
以前写过一篇帖子,记录了链表在C语言中的描述代码.C语言中没有链表的直接实现,因此,我们需要自己编写代码实现.请参考[我的这篇文章]. Java中默认为我们提供了链表的API—— LinkedList ...
- 《神经网络算法与实现-基于Java语言》的读书笔记
文章提纲 全书总评 读书笔记 C1.初识神经网络 C2.神经网络是如何学习的 C3.有监督学习(运用感知机) C4.无监督学习(自组织映射) Rreferences(参考文献) 全书总评 书本印刷质量 ...
- 基于java语言的给cube添加custom view来实现权限控制
今天是农历2014年的最后一个工作日了,在这里提前祝大家新年快乐.羊年大吉!当然本人今天也拿出来点儿真东西,做为献给大家的新年礼物,依次共勉. 下文主要讲述的是使用Java代码来完成对cube基于部门 ...
- 基于JAVA语言的selenium测试基础总结
目录一.基本语句1.循环控制(break,continue)3.字符的替换(replace,repalceFirst,replaceAll,regex)4.字符串的连接("+",a ...
- Selenium(基于JAVA语言)-》在eclipse上运行web项目在Mac系统上启动时提示nodename nor servname provided解决办法
最近使用eclipse进行自动化测试时,遇到一种情况,无法调起浏览器,且有报错,如下: org.openqa.selenium.WebDriverException: failed to lookup ...
- 基于JAVA语言的selenium总结
目录一.基本语句 1.循环控制(break,continue) 3.字符的替换(replace,repalceFirst,replaceAll,regex) 4.字符串的连接("+" ...
随机推荐
- VUE项目部署到线上生产环境,Loading chunk xxx failed
项目部署到生产环境,路由点击无效,报错 Loading chunk chunk-xxxxx failed.(missing xxxx) 加载失败,错误的路径. 话不多说,直接贴代码: vue.conf ...
- 1day漏洞反推技巧实战(3)
代码审计必备技能,github代码对比,写一笔: 搜索某开源组建漏洞,搜索出来某个版本rce: 通过消息得出:存在漏洞版本:1.10.10 ,修复漏洞版本1.10.11 去github寻找apache ...
- 从MVC到DDD的架构演进
DDD这几年越来越火,资料也很多,大部分的资料都偏向于理论介绍,有给出的代码与传统MVC的三层架构差异较大,再加上大量的新概念很容易让初学者望而却步.本文从MVC架构角度来讲解如何演进到DDD架构. ...
- 02 HTML标签
2. HTML标签 1. HTML简介 用户使用浏览器打开网页看到结果的过程就是:浏览器将服务端的文本文件(即网页文件)内容下载到本地,然后打开显示的过程. 而文本文件的文档结构只有空格和黄航两种组织 ...
- 最新版的Dubbo Admin 3.0 本地启动方式
项目下载 项目地址:https://github.com/apache/dubbo-admin 如下图,使用git地址直接构建或者下载zip包构建源码都可以,我用的是下载的zip包, 项目架构说明 d ...
- suse 12 二进制部署 Kubernetets 1.19.7 - 第07章 - 部署kube-controller-manager组件
文章目录 1.7.部署kube-controller-manager 1.7.0.创建kube-controller-manager请求证书 1.7.1.生成kube-controller-manag ...
- MySQL架构原理之存储引擎InnoDB线程模型
如下图示,为InnoDB线程模型示意图: 1.IO Thread 在InnoDB中使用了大量的AIO(Async IO)来做读写处理,这样可以极大提高数据库的性能.其提供了write/read/ins ...
- Spring Cloud 中自定义外部化扩展机制原理及实战
Spring Cloud针对Environment的属性源功能做了增强, 在spring-cloud-contenxt这个包中,提供了PropertySourceLocator接口,用来实现属性文件加 ...
- 智能化管理工具:商业智能BI
BI(商业智能)是在ERP等信息化管理工具的基础上提出的,是基于信息技术构建的智能化管理工具,它实时地对ERP.CRM.SCM等管理工具生成的企业数据进行各种分析,并给出报告,帮助管理者认识企业和市 ...
- BI能给企业带来什么收益,企业应该如何选择好的BI工具?
任何从事数据分析的小伙伴,或多或少都会听说BI这个数据分析工具.希望进入数据分析工作的小伙伴也一定绕不开BI这个话题,那么BI到底是什么呢?为什么BI如此重要?BI能给企业带来什么?如何选择BI工具 ...