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里的内容,你会得到一个异常. ...
随机推荐
- C#十六进制值0x12,是一个无效字符 - 程序园
原文:C#十六进制值0x12,是一个无效字符 - 程序园 我正在加载很多xml文档,其中一些返回错误,如“十六进制值0x12,是无效字符”,并且有不同的字符.如何删除它们? 我在这里做了一个小的研 ...
- python之常用的数据处理方法
1.生成6位数验证码 "".join([random.choice(chars) for i in range(6)]) 2.密码加密 import hashlib def enc ...
- add a characteristic in enovia PLM
Problem: add a new Char. name D_COI6 that the description is Injected coloration #7 (COI6) in the D_ ...
- mysql的各种锁简单总结
表总体上分为三种: 1.表锁 Myisam 开销小,并发低,加锁快,不会出现死锁问题:锁粒度大,发生锁冲突的概率最高. 2.行锁 innodb 开销大,并发高,加锁慢,会出现死锁问题:锁粒度小,发生 ...
- CentOS7.6下安装Oracle JDK
注:本教程使用XShell ssh到CentOS服务器,并使用root用户登录,如使用其他普通用户登录,请在命令前加sudo 1).在/usr/local/目录下(看个人情况)新建文件夹java用来存 ...
- bzoj1007题解
[题意分析] 给你n个上半平面,求包含这些上半平面的交的上半平面. [解题思路] 按斜率排序,用单调栈维护一个下凸壳即可.复杂度O(nlog2n). [参考代码] #include <cctyp ...
- storm集群的安装
storm图解 storm的基本概念 Topologies:拓扑,也俗称一个任务 Spoults:拓扑的消息源 Bolts:拓扑的处理逻辑单元 tuple:消息元组,在Spoults和Bolts传递数 ...
- C/C++ Muti-Thread多线程编程学习(之)线程Thread | 创建、运行、结束
文章目录 前言 线程 Thread 创建线程 CreateThread _beginthread _beginthreadex pthread_create 线程运行 结束线程 前言 多线程(Mu ...
- NX二次开发-UFUN获取工程图视图边界线是否显示UF_DRAW_ask_border_display
#include <uf.h> #include <uf_draw.h> #include <uf_ui.h> UF_initialize(); logical b ...
- curl命令,curl实现post,curl监控网页shell脚本,curl多进程实现并控制进程数,
cURL > Docs > Tutorial: http://curl.haxx.se/docs/httpscripting.html 下载单个文件,默认将输出打印到标准输出中(STDO ...