单循环链表(基于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.字符串的连接("+" ...
随机推荐
- jqGrid 修改单元格值或者替换图片及其他
var rowIds = jQuery("#list1").jqGrid('getDataIDs'); for (var k = 0; k < ...
- 降维处理PCA
要理解什么是降维,书上给出了一个很好但是有点抽象的例子. 说,看电视的时候屏幕上有成百上千万的像素点,那么其实每个画面都是一个上千万维度的数据:但是我们在观看的时候大脑自动把电视里面的场景放在我们所能 ...
- 1、架构--架构图、Iptables(简介、四表五链、流程图、使用、扩展模块)、包过滤防火墙
笔记 1.画架构图 2.Iptables 1.1 什么是防火墙 防止别人恶意访问. 1.2 防火墙种类 硬件防火墙 F5 软件防火墙 iptables firewalld 安全组 3.Iptables ...
- Solution -「SDOI 2016」「洛谷 P4076」墙上的句子
\(\mathcal{Description}\) Link. (概括得说不清话了还是去看原题吧 qwq. \(\mathcal{Solution}\) 首先剔除回文串--它们一定对答案产 ...
- 微服务6:通信之网关 Ready
★微服务系列 微服务1:微服务及其演进史 微服务2:微服务全景架构 微服务3:微服务拆分策略 微服务4:服务注册与发现 微服务5:服务注册与发现(实践篇) 微服务6:通信之网关 1 概述 回顾下前面几 ...
- CoRR 2018 | Horovod: Fast and Easy Distributed Deep Learning in Tensorflow
将深度学习模型的训练从单GPU扩展到多GPU主要面临以下问题:(1)训练框架必须支持GPU间的通信,(2)用户必须更改大量代码以使用多GPU进行训练.为了克服这些问题,本文提出了Horovod,它通过 ...
- 请求XSS攻击原理
起因 巨人的肩膀 一个神秘URL酿大祸,差点让我背锅! (qq.com)
- KVM 虚机镜像操作, 扩容和压缩
KVM镜像操作 qemu-img命令 创建镜像 qemu-img create # 创建一个设备空间大小为10G的镜像 qemu-img create -f qcow2 centos7-guest.q ...
- Windows Server 2012 R2通过命令行重置网络环境
转至:https://jingyan.baidu.com/article/48b37f8d5d89385a646488b5.html 我们使用Windows Server 2012 R2时会遇到通过命 ...
- linux(Centos7)安装mysql
查看系统环境 [root@localhost html]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) CentOS 7 ...