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. 嵌入式 Linux 与linux启动时自动加载模块

    一.在ARM linux 下,一般而言,产品在启动的过程中应该加载模块,最简单的方法是修改启动过程的rc脚本(/etc/init.d/rcS),增加ismod /../xxx.ko这个命令.例如:加载 ...

  2. javascript 一些关于css操作的函数

    // 通过样式表 获得css样式 //obj 表示dom对象,name 表示css属性 比如width等 function getStyle(obj,name){ if(obj.currentStyl ...

  3. 部署Java Web项目报错(一)

    今天,我在部署Java Web项目时,出现错误,并且在eclipse新建一个servers,却出现多个项目. 具体错误截图如下: 然后,我又将项目部署到JBoss服务器中,却还是运行不成功 22:12 ...

  4. strcpy函数

    不调用C/C++库函数,编写strcpy()函数. char * my_strcpy(char *strDest,const char *strSrc) { char *p=strDest; whil ...

  5. javax.servlet.JspTagException:Illegal use of &lt;when&gt;-style tag without &lt;choose &gt;as its di

    1.错误描述 javax.servlet.JspTagException:Illegal use of <when>-style tag without <choose >as ...

  6. 在SDL工程中让SDL_ttf渲染汉字

    有时候在关于SDL的博文中看到一些评论,说SDL对中文的支持不佳,因为当程序涉及中文时总是输出乱码. 照我个人观点,这里面很多都是误解.下面就根据我在windows下使用SDL的情况,说说我的观点. ...

  7. Linux之批量挂载硬盘

    ############parted工具分区############### #!/bin/bash #shell脚本开头格式PATH=/bin:/sbin:/usr/bin:/usr/sbin #保证 ...

  8. Windows Developer Day - Windows AI Platform

    本次 Windows Developer Day,最值得期待的莫过于 Windows AI Platform 了,可以说是千呼万唤始出来.观看直播的开发者们,留言最多的也是 Windows AI Pl ...

  9. 爬虫抓包工具Fiddle设置

    安装证书(用于https)

  10. 【SPOJ】Longest Common Substring II (后缀自动机)

    [SPOJ]Longest Common Substring II (后缀自动机) 题面 Vjudge 题意:求若干个串的最长公共子串 题解 对于某一个串构建\(SAM\) 每个串依次进行匹配 同时记 ...