java实现循环链表的增删功能,完整代码

package songyan.test.demo;

public class Demo {
// java 实现循环链表
public static void main(String[] args) {
Node node1 = new Node("name1");
Node node2 = new Node("name2");
Node node3 = new Node("name3");
Node node4 = new Node("name4");
Node node5 = new Node("name5"); node1.setNextNode(node2);
node2.setNextNode(node3);
node3.setNextNode(node4);
node4.setNextNode(node5);
node5.setNextNode(node1); // getNodes(node1); // 添加node2.5
Node node11 = new Node("node2.5");
node11.setNextNode(node2.getNextNode());
node2.setNextNode(node11);
// getNodes(node1); // 删除节点
node2.setNextNode(node3);
getNodes(node1); } public static void getNodes(Node startNode) {
// 循环遍历
Node node = startNode;
do {
System.out.println(node.getName());
node = node.getNextNode();
} while (node.getNextNode() != startNode.getNextNode());
}
} class Node {
private String name;
private Node nextNode; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Node getNextNode() {
return nextNode;
} public void setNextNode(Node nextNode) {
this.nextNode = nextNode;
} Node(String name) {
this.name = name;
this.nextNode = null;
} Node() {
this.nextNode = null;
} }

分段解读,

1,声明节点类【包括节点名称,指针】

class Node{
private String name;
private Node nextNode;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Node getNextNode() {
return nextNode;
}
public void setNextNode(Node nextNode) {
this.nextNode = nextNode;
}
Node(String name)
{
this.name=name;
this.nextNode=null;
}
Node()
{
this.nextNode=null;
} }

2,创建节点

Node node1= new Node("name1");
Node node2= new Node("name2");
Node node3= new Node("name3");
Node node4= new Node("name4");
Node node5= new Node("name5");

3,设置指针

【这里不同于单链表的地方就是要给尾节点设置指向头结点的指针】

node1.setNextNode(node2);
node2.setNextNode(node3);
node3.setNextNode(node4);
node4.setNextNode(node5);
node5.setNextNode(node1);

3,循环遍历链表

注意:结束的条件不同于单链表的地方,

在单链表中结束条件是nextNode为空,

然而在这里,尾节点的指针式指向头结

点的,所以条件是节点的指针指向头结点

    public static void getNodes(Node startNode) {
// 循环遍历
Node node = startNode;
do {
System.out.println(node.getName());
node = node.getNextNode();
} while (node.getNextNode() != startNode.getNextNode());
}

4,添加节点

【这里与单向链表完全相同】

Node node11=new Node("node2.5");
node11.setNextNode(node2.getNextNode());
node2.setNextNode(node11);

4,删除节点

【这里与单向链表完全相同】

node2.setNextNode(node3);

java实现循环链表的增删功能的更多相关文章

  1. JAVA实现双向链表的增删功能

    JAVA实现双向链表的增删功能,完整代码 package linked; class LinkedTable{ } public class LinkedTableTest { //构造单链表 sta ...

  2. java实现单链表的增删功能

    JAVA 实现单链表的增删功能 package linked; class LinkedTable{ } public class LinkedTableTest { public static vo ...

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

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

  4. Atitit php java python nodejs错误日志功能的比较

    Atitit php  java  python  nodejs错误日志功能的比较 1.1. Php方案 自带 1 1.2. Java解决方案 SLF4J 1 1.3. Python解决方案 自带lo ...

  5. Fastjson是一个Java语言编写的高性能功能完善的JSON库。

    简介 Fastjson是一个Java语言编写的高性能功能完善的JSON库. 高性能 fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jackson. ...

  6. java实现网站paypal支付功能并且异步修改订单的状态

    java实现网站paypal支付功能并且异步修改订单的状态:步骤如下 第一步:去paypal的官网https://www.paypal.com注册一个个人账号,在创建沙箱测试账号时需要用到 第二步:p ...

  7. Java实现在线预览功能

    java实现在线预览功能,需要用到  jacob.dll jacob.jar   预览pdf所需js  pdfobject.min.js 将上传文件转为pdf保存. <div class=&qu ...

  8. Java案例之随机验证码功能实现

    实现的功能比较简单,就是随机产生了四个字符然后输出.效果图如下,下面我会详细说一下实现这个功能用到了那些知识点,并且会把 这些知识点详细的介绍出来.哈哈 ,大神勿喷,对于初学Java的人帮助应该蛮大的 ...

  9. 【java】java自带的java.util.logging.Logger日志功能

    偶然翻阅到一篇文章,注意到Java自带的Logger日志功能,特地来细细的看一看,记录一下. 1.Java自带的日志功能,默认的配置 ①Logger的默认配置,位置在JRE安装目录下lib中的logg ...

随机推荐

  1. eclipse Maven配置

    ①下载:http://maven.apache.org/download.cgi ②解压至:F:\Study\apache-maven-3.5.2 ③配置环境变量 变量名:M2_HOME 变量值:F: ...

  2. RS232 3线制与7线制的区别

    当通信距离较近时,可不需要Modem,通信双方可以直接连接,这种情况下,只需使用少数几根信号线.最简单的情况,在通信中根本不需要RS-232C的控制联络信号,只需三根线(发送线.接收线.信号地线)便可 ...

  3. mysql常用基础操作语法(八)~~多表查询合并结果和内连接查询【命令行模式】

    1.使用union和union all合并两个查询结果:select 字段名 from tablename1 union select 字段名 from tablename2: 注意这个操作必须保证两 ...

  4. freemarker写select组件(一)

    freemarker写select组件 1.宏定义 <#macro select id datas> <select id="${id}" name=" ...

  5. BOM(浏览器对象模型)的一些操作

    一个完整的JavaScript实现由三部分组成: ECMAScript:核心,定义语言基础,规定了语言的组成部分(语法,类型,关键字,保留字,对象等) DOM:文档对象模型,·DOM把整个页面映射成一 ...

  6. 【原】如何获取Java动态生成类?

    写作目的:Java大部分框架,如Spring,Hibernate等都会利用动态代理在程序运行的时候生成新的类, 有的时候为了学习,或者深入了解动态代理,想查看动态生成类的源代码究竟长怎么个样子, 通过 ...

  7. jquery 记住账号 记住密码

    <body> <label><input type="checkbox" onclick="loginBtn_user()" /& ...

  8. PyTorch官方中文文档:torch.Tensor

    torch.Tensor torch.Tensor是一种包含单一数据类型元素的多维矩阵. Torch定义了七种CPU tensor类型和八种GPU tensor类型: Data tyoe CPU te ...

  9. 在linux下,怎么去查看一个运行中的程序, 到底是占用了多少内存

    1. 在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有 (1). ps aux: 其中  VSZ(或VSS)列 表示,程序占用了多少虚拟内存. RSS列 表示, 程序占用了多少物 ...

  10. Selenium简介与环境搭配-----Selenium快速入门(一)

    Selenium是一套自动化测试框架.官方网站是:https://www.seleniumhq.org/  某些童鞋访问可能需要FQ. Selenium支持多种语言开发,例如Java,Python,C ...