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. 读取含有BOM头的文件遇到的问题

    需求是读取一个csv文件,然后解析成对应的数据结构.csv必须包含指定的某些列,通过列名header来进行校验. 解析配置文件的方法. public List<QuestionData> ...

  2. TI Davinci DM6446开发攻略——根文件系统的裁剪和移植

    一.补充文件系统知识 Linux根文件系统是存放tool软件.lib文件.script(脚本).配置文件.其他特殊文件.自己开发的应用程序的地方.嵌入式linux的根文件系统rootfs就像windo ...

  3. 使用mongoVUE删除大量数据的情况下失效问题

    昨天有一个系统出现了问题,导致半夜时大量的错误数据产生,早晨一早接到上边通知让把这些数据尽数删除. 不可否认在数据操作时mongoVUE更加直观,因此一般情况下我也都是使用这个工具,但是今天却出现了问 ...

  4. HI3531串口测试程序(arm)

    #include<stdio.h> unsigned int UART0_ADDR = 0x20080000; unsigned int retu=0; int i=0; void del ...

  5. Vue项目搭建及原理三

    我每次写博客都要先在本地写一遍草稿,所以之前有些发布顺序可能会有一丢丢凌乱 哈哈哈,以后绝对改正,那下面我们就说一下创建及项目目录结构吧 三.创建项目 1.初始化Webpack p.p1 { marg ...

  6. 关于swiper的滚动条滑动

    <div class="swiper-container2"> <div class="swiper-wrapper"> <div ...

  7. python与机器学实践-何宇健 源代码及过程中遇到的问题

    # -*- coding: utf-8 -*-"""Spyder EditorThis is a temporary script file.""&q ...

  8. View的放大->旋转->还原动画

    以UIButton为例,创建一个类,继承于UIButton /*页面的创建用storyboard*/ .h文件  @interface PTSRecommendButton : UIButton - ...

  9. 【BZOJ2243】【SDOI2011】染色(树链剖分,线段树)

    题面 我们也要换个花样,这回提供洛谷的题面 题解 线段树+树链剖分大水题 维护颜色段的方法很简单呀... 维护当前区间内的颜色段个数, 以及当前区间左端和右端的颜色, 合并的时候考虑是否要减一下就行了 ...

  10. LightOJ1282 Leading and Trailing

    题面 给定两个数n,k 求n^k的前三位和最后三位 Input Input starts with an integer T (≤ 1000), denoting the number of test ...