java实现循环链表的增删功能
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实现循环链表的增删功能的更多相关文章
- JAVA实现双向链表的增删功能
JAVA实现双向链表的增删功能,完整代码 package linked; class LinkedTable{ } public class LinkedTableTest { //构造单链表 sta ...
- java实现单链表的增删功能
JAVA 实现单链表的增删功能 package linked; class LinkedTable{ } public class LinkedTableTest { public static vo ...
- java与数据结构(3)---java实现循环链表
循环链表:将单链表中尾结点的指针由空指针改为指向头结点,就使整个单链表形成一个环,这种首尾相接的单链表称为单链表循环表,即循环链表. 循环链表与单链表最重要的区别是:尾结点的指针,不再是p->n ...
- Atitit php java python nodejs错误日志功能的比较
Atitit php java python nodejs错误日志功能的比较 1.1. Php方案 自带 1 1.2. Java解决方案 SLF4J 1 1.3. Python解决方案 自带lo ...
- Fastjson是一个Java语言编写的高性能功能完善的JSON库。
简介 Fastjson是一个Java语言编写的高性能功能完善的JSON库. 高性能 fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jackson. ...
- java实现网站paypal支付功能并且异步修改订单的状态
java实现网站paypal支付功能并且异步修改订单的状态:步骤如下 第一步:去paypal的官网https://www.paypal.com注册一个个人账号,在创建沙箱测试账号时需要用到 第二步:p ...
- Java实现在线预览功能
java实现在线预览功能,需要用到 jacob.dll jacob.jar 预览pdf所需js pdfobject.min.js 将上传文件转为pdf保存. <div class=&qu ...
- Java案例之随机验证码功能实现
实现的功能比较简单,就是随机产生了四个字符然后输出.效果图如下,下面我会详细说一下实现这个功能用到了那些知识点,并且会把 这些知识点详细的介绍出来.哈哈 ,大神勿喷,对于初学Java的人帮助应该蛮大的 ...
- 【java】java自带的java.util.logging.Logger日志功能
偶然翻阅到一篇文章,注意到Java自带的Logger日志功能,特地来细细的看一看,记录一下. 1.Java自带的日志功能,默认的配置 ①Logger的默认配置,位置在JRE安装目录下lib中的logg ...
随机推荐
- 读取含有BOM头的文件遇到的问题
需求是读取一个csv文件,然后解析成对应的数据结构.csv必须包含指定的某些列,通过列名header来进行校验. 解析配置文件的方法. public List<QuestionData> ...
- TI Davinci DM6446开发攻略——根文件系统的裁剪和移植
一.补充文件系统知识 Linux根文件系统是存放tool软件.lib文件.script(脚本).配置文件.其他特殊文件.自己开发的应用程序的地方.嵌入式linux的根文件系统rootfs就像windo ...
- 使用mongoVUE删除大量数据的情况下失效问题
昨天有一个系统出现了问题,导致半夜时大量的错误数据产生,早晨一早接到上边通知让把这些数据尽数删除. 不可否认在数据操作时mongoVUE更加直观,因此一般情况下我也都是使用这个工具,但是今天却出现了问 ...
- HI3531串口测试程序(arm)
#include<stdio.h> unsigned int UART0_ADDR = 0x20080000; unsigned int retu=0; int i=0; void del ...
- Vue项目搭建及原理三
我每次写博客都要先在本地写一遍草稿,所以之前有些发布顺序可能会有一丢丢凌乱 哈哈哈,以后绝对改正,那下面我们就说一下创建及项目目录结构吧 三.创建项目 1.初始化Webpack p.p1 { marg ...
- 关于swiper的滚动条滑动
<div class="swiper-container2"> <div class="swiper-wrapper"> <div ...
- python与机器学实践-何宇健 源代码及过程中遇到的问题
# -*- coding: utf-8 -*-"""Spyder EditorThis is a temporary script file.""&q ...
- View的放大->旋转->还原动画
以UIButton为例,创建一个类,继承于UIButton /*页面的创建用storyboard*/ .h文件 @interface PTSRecommendButton : UIButton - ...
- 【BZOJ2243】【SDOI2011】染色(树链剖分,线段树)
题面 我们也要换个花样,这回提供洛谷的题面 题解 线段树+树链剖分大水题 维护颜色段的方法很简单呀... 维护当前区间内的颜色段个数, 以及当前区间左端和右端的颜色, 合并的时候考虑是否要减一下就行了 ...
- LightOJ1282 Leading and Trailing
题面 给定两个数n,k 求n^k的前三位和最后三位 Input Input starts with an integer T (≤ 1000), denoting the number of test ...