1、节点类

public class Node<T> {
public T data;
public Node next;
}

2、实现类

public class CircularLink<T> {

    private static Node head = null;

    /**
* 初始化
*/
public void initCircularLink() {
head = new Node();
head.data = null;
head.next = head;
} /**
* 插入节点
*
* @param element :节点元素值
*/
public void insertCircularLink(T element) {
Node node = new Node(); //初始化节点
node.data = element;
if (head.next == head) {
head.next = node;
node.next = head;
} else {
Node temp = head;
while (temp.next != head) {
temp = temp.next;
}
temp.next = node;
node.next = head; }
} /**
* 值删除
*
* @param element : 要删除的值
* @return :删除则为true 否则为假
*/
public boolean deleteCircularLink(T element) { Node temp = head;
if (temp.next == head) {
System.out.println("链表已空,没有可删除的值");
return false;
}
while (temp.next != head) {
if (temp.next.data == element) {
temp.next = temp.next.next;
return true;
} else {
temp = temp.next;
}
}
return false;
} /**
* 下标删除
*
* @param i : 要删除的值下标
* @return :删除则为true 否则为假
*/
public boolean deleteIndexCircularLink(int i) { Node temp = head;
int index = -1;
if (temp.next == head) {
System.out.println("链表已空,没有可删除的值");
return false;
}
if (i < 0 || i >= sizeCircularLink()) {
System.out.println("越界下标");
return false;
}
while (temp.next != head) {
index++;
if (index == i) {
temp.next = temp.next.next;
}
temp = temp.next;
}
return false; } /**
* 给定值求下标
*
* @param element :要找的元素
*/
public void findCircularLink(T element) {
Node temp = head;
int index = -1;
if (temp.next == head) {
System.out.println("链表已空,无法查找"); }
while (temp.next != head) {
temp = temp.next;
index++;
if (temp.data == element) {
temp = temp.next;
System.out.println("下标为: " + index);
return;
}
}
System.out.println("你要找的值不在这里");
} /**
* 下标求值
* @param index
*/
public void findDataCircularLink(int index) {
Node temp = head;
int size= 0; //为增加下标用的
if (temp.next == head) {
System.out.println("链表已空,没有可删除的值");
return;
}
if (index >= sizeCircularLink() || index < 0){
System.out.println("你的下标越界");
return;
} while (temp.next !=head){
temp = temp.next; if (size == index){
System.out.println("你要找的值为: "+temp.data);
return;
}
size++;
}
System.out.println("没有你的值");
} /**
* 打印
*/
public void printCircularLink() {
Node temp = head;
System.out.print("打印循环链表: ");
while (temp.next != head) {
temp = temp.next;
System.out.print(temp.data + " "); }
System.out.println();
} /**
* 求长度
*
* @return : 返回的长度
*/
public static int sizeCircularLink() {
Node temp = head;
int size = 0;
while (temp.next != head) {
temp = temp.next;
size++;
}
return size;
} public static void main(String[] args) {
CircularLink<Integer> circularLink = new CircularLink();
circularLink.initCircularLink();
circularLink.insertCircularLink(1);
circularLink.insertCircularLink(2);
circularLink.insertCircularLink(3);
circularLink.insertCircularLink(4);
circularLink.insertCircularLink(5); circularLink.printCircularLink();
System.out.println("长度: " + circularLink.sizeCircularLink());
System.out.println(); System.out.println("值删除值");
circularLink.deleteCircularLink(1);
circularLink.printCircularLink();
System.out.println("长度: " + circularLink.sizeCircularLink());
System.out.println(); System.out.println("下标删除值");
circularLink.deleteIndexCircularLink(1);
circularLink.printCircularLink();
System.out.println("长度: " + circularLink.sizeCircularLink());
System.out.println(); System.out.println("值查找下标");
circularLink.findCircularLink(5);
circularLink.printCircularLink();
System.out.println("长度: " + circularLink.sizeCircularLink());
System.out.println(); System.out.println("下标查找值");
circularLink.findDataCircularLink(3);
circularLink.printCircularLink();
System.out.println("长度: " + circularLink.sizeCircularLink());
System.out.println(); }
}

3、测试结果

打印循环链表: 1 2 3 4 5
长度: 5 值删除值
打印循环链表: 2 3 4 5
长度: 4 下标删除值
打印循环链表: 2 4 5
长度: 3 值查找下标
下标为: 2
打印循环链表: 2 4 5
长度: 3 下标查找值
你的下标越界
打印循环链表: 2 4 5
长度: 3

3、循环链表(java实现)的更多相关文章

  1. java与数据结构(4)---java实现双向循环链表

    线性表之链式存储结构双向循环链表 双向循环链表:每个结点包含了数据.直接前驱地址指针和直接后驱地址指针,头结点的直接前驱指向尾结点,尾结点的直接后驱指向头结点,头尾相连构成一个可正可反的圆环.可以形象 ...

  2. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  3. java程序设计之循环链表

    照例来说点废话,愿自己生一颗温柔细腻的心,这样女朋友也许一个眼神,一个微笑,我就知道如何做,可惜内心与外表一样粗糙,这一生有幸认识她,愿天下有情人终成眷属. 循环链表,顾名思义循环就好了,所以建一个线 ...

  4. JAVA 链表操作:循环链表

    主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...

  5. 双向循环链表的Java版本实现

    1.单项循环列表 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环.和单链表相比,循环单链表的长处是从链尾到链 ...

  6. java与数据结构(3)---java实现循环链表

    循环链表:将单链表中尾结点的指针由空指针改为指向头结点,就使整个单链表形成一个环,这种首尾相接的单链表称为单链表循环表,即循环链表. 循环链表与单链表最重要的区别是:尾结点的指针,不再是p->n ...

  7. java实现循环链表的增删功能

    java实现循环链表的增删功能,完整代码 package songyan.test.demo; public class Demo { // java 实现循环链表 public static voi ...

  8. 【Java】 大话数据结构(4) 线性表之循环链表

    本文稍微介绍了一下循环链表. 将单链表终端结点的指针域由空指针改为指向头结点,形成一个环,这种头尾相接的单链表称为循环列表. 循环列表的结构如下图所示: 循环链表的优点:可以从任意一个结点出发,遍历所 ...

  9. java实现双向循环链表

    java实现循环链表:http://www.cnblogs.com/lixiaolun/p/4643911.html 在单链表中,查询下一个元素的时间是O(1).查询上一个元素的时间却是O(n). 为 ...

  10. (java实现)单向循环链表

    什么是单向循环链表 单向循环链表基本与单向链表相同,唯一的区别就是单向循环链表的尾节点指向的不是null,而是头节点(注意:不是头指针). 因此,单向循环链表的任何节点的下一部分都不存在NULL值. ...

随机推荐

  1. 从头开始制作OJ-在线IDE的搭建

    大家好,我是Fred913. 之前,我看过各种OJ(OpenJudge) 但是,还是没有自己做的好. 所以,我就来写了这篇教程. 环境 这次,我打算使用这些:PHP 5.6 Nginx/Apache ...

  2. 史上最全面 Android逆向培训之__Xposed使用

    刚招来个Android,干了半个月辞职了,他走之后,成堆的bug被测了出来,都是这个新人代码都没看懂就开始改的一塌糊涂,还给提交了.实在是让人头疼,清理了一个月多月才把他半个月写的bug清理个差不多. ...

  3. Windows Server 2008配置系统安全策略

    下面学习Windows Server 2008配置系统安全策略 在工作组中的计算机本地安全策略有 用户策略,密码策略,密码过期默认42天 服务账户设置成永不过期,帐户锁定策略,本地策略,审核策略,计算 ...

  4. 消息中间件——RabbitMQ(五)快速入门生产者与消费者,SpringBoot整合RabbitMQ!

    前言 本章我们来一次快速入门RabbitMQ--生产者与消费者.需要构建一个生产端与消费端的模型.什么意思呢?我们的生产者发送一条消息,投递到RabbitMQ集群也就是Broker. 我们的消费端进行 ...

  5. 『深度应用』NLP机器翻译深度学习实战课程·壹(RNN base)

    深度学习用的有一年多了,最近开始NLP自然处理方面的研发.刚好趁着这个机会写一系列NLP机器翻译深度学习实战课程. 本系列课程将从原理讲解与数据处理深入到如何动手实践与应用部署,将包括以下内容:(更新 ...

  6. 从 Python 之父的对话聊起,关于知识产权、知识共享与文章翻译

    一.缘起 前不久,我在翻译 Guido van Rossum(Python之父)的文章时,给他留言,申请非商业用途的翻译授权. 过程中起了点小误会,略去不表,最终的结果是:他的文章以CC BY-NC- ...

  7. 0807 创建vue实例以及vue的基础指令

    lession1 1.Vue的了解   渐进式框架   作者:尤雨溪     mvvm 2.创建vue实例 引入<script src="vue.js"><scr ...

  8. Vulkan(0)搭建环境-清空窗口

    Vulkan(0)搭建环境-清空窗口 认识Vulkan Vulkan是新一代3D图形API,它继承了OpenGL的优点,弥补了OpenGL的缺憾.有点像科创板之于主板,歼20之于歼10,微信之于QQ, ...

  9. python大纲+变量基础详解

    1.python的历史 ​ python2和python3的区别 ​ 2004 Django框架的诞生 2.python是编程语言 ​ python 是解释型语言 3.python的种类 ​ cpyt ...

  10. 使用Docker快速部署ELK分析Nginx日志实践(二)

    Kibana汉化使用中文界面实践 一.背景 笔者在上一篇文章使用Docker快速部署ELK分析Nginx日志实践当中有提到如何快速搭建ELK分析Nginx日志,但是这只是第一步,后面还有很多仪表盘需要 ...