java实现单链表增删改查
package 数据结构算法.链表; /*
*定义节点
* 链表由节点构成
*/
public class Node<E> {
private E e; //数据data
private Node<E> next; //指向下一个节点 public Node() { } public Node(E e) {
this.e = e;
} public Node<E> getNext() {
return next;
} public void setNext(Node<E> next) {
this.next = next;
} public E getE() {
return e;
} public void setE(E e) {
this.e = e;
}
}
package 数据结构算法.链表; /*
* 定义实现类MyLinkedList
* 实现链表的基本功能:增删改查
*/
public class MyLinkedList<E> {
//声明头节点尾节点
private Node<E> head;
private Node<E> last;
//链表的大小
private int size;
private int modcount; //计算被修改的次数 public MyLinkedList() {
head = new Node<E>();//实例化头结点
last = head;
} /*
*返回单链表中存储的元素总数
*/
public int size() {
return size;
} /*
*获取指定索引位置的节点对象
*/
public Node<E> get(int index) {
if (index < 0 || index > size - 1)
return null;
Node<E> node = head.getNext();//将头结点的下一个节点赋给Node
for (int i = 0; i < index; i++) {
node = node.getNext();//获取node的下一个节点
}
return node;
} /*
*获取指定索引位置的数据
*/
public E getValue(int index) {
if (index < 0 || index > size - 1)
return null;
Node<E> node = get(index);
return node.getE();
} /*
*增加元素
*/
public void add(E e) {
Node<E> node = new Node<E>(e); //以e实例化一个节点
last.setNext(node);//往尾节点后追加节点
last = node;//该节点设为最后一个节点
size++;
modcount++;
} /*
*指定位置插入元素,返回插入的节点数据
*/
public E add(int index, E e) {
if (index < 0 || index > size - 1)
return null;
Node<E> node = new Node<E>(e); //实例化一个节点
//找到插入的原节点
Node<E> oldNode = get(index);
if (index == 0) {//当索引为0时
head.setNext(node);
} else {
//找到插入节点的上一个
Node<E> bNode = get(index - 1);
bNode.setNext(node);
}
node.setNext(oldNode);
size++;
modcount++;
return oldNode.getE();
} /*
*删除指定的节点e,并返回删除节点的数据
*/
public E delete(int index) {
if (index < 0 || index > size - 1)
return null;
if (index == 0) {//当索引为1,令头结点的下一个节点为头结点
Node<E> node = head.getNext();
head.setNext(node.getNext());
}
//获取要删除节点的前一个节点
Node<E> bNode = get(index - 1);
//获取要删除的节点
Node<E> Node = bNode.getNext();
//获取要删除节点的下一个节点
Node<E> nNode = Node.getNext();
//删除该节点
bNode.setNext(nNode);
//清除Node的下一个节点
Node.setNext(null);
size--;
modcount++;
return Node.getE();//返回节点中的数据域
} /*
*修改指定位置的数据域并返回修改后的数据
*/
public E set(int index, E e) {
if (index < 0 || index > size - 1)
return null;
//获取指定位置的原节点
Node<E> node = get(index);
node.setE(e);
modcount++;
return node.getE();
}
}
package 数据结构算法.链表; /*
*定义测试类
*/
public class MyLinkedListTest {
public static void main(String[] args) {
MyLinkedList<String> list = new MyLinkedList<>(); //测试add
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add(0,"newone");
list.add(1,"newtwo");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.getValue(i)+" ");
} //测试set
System.out.println();
list.set(0, "111");
list.set(1, "222");
System.out.println(list.getValue(0) + " " + list.getValue(1)); //测试delete
System.out.println();
list.delete(1);
for (int i = 0; i < list.size(); i++) {
System.out.print(list.getValue(i)+" ");
}
}
}
运行结果如下:

参考自:https://zhuanlan.zhihu.com/p/30141170
java实现单链表增删改查的更多相关文章
- Java连接MySQL数据库增删改查通用方法
版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...
- Java实现mongodb原生增删改查语句
Java实现mongodb原生增删改查语句 2018-03-16 自动化测试时,需校验数据库数据,为了快速自动化,在代码中用原生增删改查语句操作mongodb 结构 代码 0 pom.xml < ...
- vue.js带复选框表单的增删改查
近段时间由于公司项目要求,前端开始使用VUE框架进行开发,最近刚开始学习,做了一个表单的增删改查,和大家分享一下. 页面模型代码设计如下 <template> <div id=&qu ...
- django-orm框架表单的增删改查
08.14自我总结 django-orm框架 一.orm基本配置 1.创建django项目 命令行:cmd先去到django创建目录,然后输入django-admin startproject dja ...
- Django框架(八)--单表增删改查,在Python脚本中调用Django环境
一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的setting中进行配置: 将DATABASES={} 更新为 DA ...
- Django框架(九)—— 单表增删改查,在Python脚本中调用Django环境
目录 单表增删改查,在Python脚本中调用Django环境 一.数据库连接配置 二.orm创建表和字段 三.单表增删改查 1.增加数据 2.删除数据 3.修改数据 4.查询数据 四.在Python脚 ...
- java实现双向链表的增删改查
双向链表的增删改查 和单链表的操作很像:https://blog.csdn.net/weixin_43304253/article/details/119758276 基本结构 1.增加操作 1.链接 ...
- Java连接MongoDB进行增删改查
1.导入必须的包: 详情看项目:http://pan.baidu.com/s/1cvDAOY 2.通过Myeclipse创建WEB项目 3. 3.bean:创建实体类 package com.bean ...
- java实现xml文件增删改查
java一次删除xml多个节点: 方案1.你直接改动了nodeList,这一般在做循环时是不同意直接这么做的. 你能够尝试在遍历一个list时,在循环体同一时候删除list里的内容,你会得到一个异常. ...
随机推荐
- sublime Text3安装及配置与解决安装插件失败
1.下载sublime Text3的官网:https://www.sublimetext.com/32.安装Package Control 下载Package Contoral地址: 链接:htt ...
- mysql 删除同样记录只保留一条
delete from fa_order_account ) as a) ) as b)
- 解析Tomcat之HttpServlet详解
解析Tomcat之HttpServlet详解 Servlet的框架是 由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所 ...
- 排列+函数映射——hdu6038好题
/* 引理:[0,n-1]的排列,i向a[i]连边,那么每个数必定在一个环中 所以数组a可以分割成一些环,数组b也可以分割成一些环 先讨论a的一个环 a[a1]=a2 a[a2]=a3 a[a3]=a ...
- zookeeper基本概述
zookeeper是一个分布式的协调服务框架 其本质是一个分布式的小文件存储系统,可以存储一些小的文件,官方建议每个小文件不要超过一兆 zk一般都是装奇数台,便于zk内部的一些投票选举 leader: ...
- NX二次开发-UFUN创建工程图注释UF_DRF_create_note
NX9+VS2012 #include <uf.h> #include <uf_drf.h> #include <NXOpen/Annotations_Note.hxx& ...
- NX二次开发-NXOpen窗口打印NXMessageBox&ListingWindow
NX9+VS2012 #include <NXOpen/NXObject.hxx> #include <NXOpen/Part.hxx> #include <NXOpen ...
- 浅谈使用RestKit将服务器的Json直接映射为本地对象
RestKit是一个主要用于iOS上网络通信的开源框架,除了发送请求与接受响应这些基本功能外,还附带coredata,以及将远程JSON映射为本地对象的功能.目前版本0.9.3,coredata还不是 ...
- 从数组中任意取出2个数,判断他们的和是否为输入的数字sum,时间复杂度为0(n^2),空间复杂度0(1)
从数组中任意取出2个数,判断他们的和是否为输入的数字sum,时间复杂度为0(n^2),空间复杂度0(1) 假设数据已经是排序好的 #include <stdio.h> #include & ...
- POJ 3237 /// 树链剖分 线段树区间修改(*-1)
题目大意: 给定树的N个结点 编号为1到N 给定N-1条边的边权. 三种操作: CHANGE k w:将第 k 条边的权值改成 w. NEGATE x y:将x到y的路径上所有边的权值乘 -1. QU ...