Java 简单链表实现
1.初衷
最近在看Java基础,有一章节涉及到链表,便记之所学所得。
2.链表的定义
链表是存储地址不连续的线性存储结构
3.链表的基本结构
一个节点包含当前节点,与下个节点的引用

4.简单链表的实现
定义一个节点Node
/**
* @author qiuling
*/
public class Node {
/**当前节点数据*/
private int data;
/**下个节点引用*/
private Node next; public Node(int data) {
this.data = data;
} public int getData() {
return data;
} public void setData(int data) {
this.data = data;
} public Node getNext() {
return next;
} public void setNext(Node next) {
this.next = next;
}
}
4.1增加节点
/**
* 增加节点
* @param data 节点数据
*/
public void addNode(int data){
Node node = new Node(data);
if (null == head){
head = node;
}else {
Node cur = head;
//找到链表末尾位置添加数据
while(null != cur.getNext()){
cur = cur.getNext();
}
cur.setNext(node);
}
}
4.2遍历打印节点
/**
* 遍历元素
*/
public void print(){
Node cur = head;
//这个地方注意下不能判断temp.getNext,
//the last Node 的next是null
while (null != cur){
System.out.println(cur.getData());
cur = cur.getNext();
}
}
addNode and print test :

4.3插入节点到指定位置

/**
* 插入节点至指定位置
* @param index 链表位置
* @param node 节点
*/
public void insertNodeByIndex(int index,Node node){
//判断插入位置
if (index<1 || index>size()){
return;
}
Node cur = head;
int length =1;
while (null != cur){
//找到指定位置
if (index == length++){
//插入节点的next = 当前节点的next
node.setNext(cur.getNext());
//当前节点的next = 插入的node
cur.setNext(node);
return;
}
cur = cur.getNext();
}
}
test :

4.4删除指定位置节点
与上面插入指定位置节点相似
/**
* 删除指定位置的节点
* @param index 链表位置
*/
public void delNodeByIndex(int index){
//判断删除节点位置是否合法
if (index<1 || index>size()){
return;
}
Node cur = head;
int i = 1;
while (cur != null) {
if (index == i++) {
//当前node的next改为删除节点的next
cur.setNext(cur.getNext().getNext());
return;
}
cur = cur.getNext();
}
}
test :

4.5获取链表长度
/**
* 获取链表长度
* @return
*/
public int size(){
Node cur = head;
int size = 0;
while (null != cur){
size++;
cur = cur.getNext();
}
return size;
}
4.6判断链表是否包含某元素
/**
* 判断链表是否包含数据
* @param data
* @return
*/
public boolean isContain(int data){
Node cur = head;
while (null != cur){
if (cur.getData() == data){
return true;
}
cur = cur.getNext();
}
return false;
}
4.7链表的反转

/**
* 反转链表
*/
public void reserveLink(){
//头节点
Node cur = head;
//前一个节点
Node pre = null;
while (null != cur){
//暂存当前节点的下个节点
Node next = cur.getNext();
//指针反转
cur.setNext(pre);
//前一个节点和当前节点顺序推移
pre = cur;
cur = next;
}
head = pre;
}

5.完结
这些东西并不是很多,自己却是拖了蛮久的,要坚持努力下去,不要丧失前进的勇气。
Java 简单链表实现的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 栈和队列的java简单实现
今天看了一本书<啊哈 算法>,书的内容不多,一共两章,第一章是常见的排序算法包括桶排序.冒泡排序和快速排序,这些事基础的排序算法网上有很多资料说明,这里主要说第二章栈,对列,链表,书上使用 ...
- 2018-2019-20172329 《Java软件结构与数据结构》第二周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第二周学习总结 教材学习内容总结 <Java软件结构与数据结构>第三章 集合概述--栈 一.集合 1.我们印 ...
- 读书笔记:《数据结构与算法分析Java语言描述》
目录 第 3 章 表.栈和队列 3.2 表 ADT 3.2.1 表的简单数组实现 3.2.2 简单链表 3.3 Java Collections API 中的表 3.3.1 Collection 接口 ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
随机推荐
- 箭头函数与普通function的区别
1. 箭头函数没有自己的this,它里面的this是继承所属上下文中的this,而且使用call与apply都无法改变 let obj = { name: 'obj' } function fn1() ...
- java 关键字汇总
关键字 描述 abstract 抽象方法,抽象类的修饰符 assert 断言条件是否满足 continue 不执行循环体剩余部分 default switch语句中的默认分支 do-while 循环语 ...
- (playbook)ubuntu下ansible安装docker
--- - hosts: test sudo: yes vars: apt_packages_ca: - apt-transport-https - ca-certificates tasks: - ...
- Android功耗评测系列之——软件评测方案原理
软件评测方案也有很多种,但核心原理都是同一个. 软件评测方案中,所有Android功耗的统计都是通过代码进行估算,没有任何实体电路和硬件设备参与统计汇报. 这个配置文件存储在Android ...
- OpenCV常用基本处理函数(2)图像基本操作
可以根据像素的行和列的坐标获取他的像素值.对 BGR 图像而言,返回值为 B,G,R 例如获取蓝色的像素值: img=cv2.imread('messi5.jpg')px=img[100,100]bl ...
- MySQL-几种关联
左表t1: DROP TABLE IF EXISTS t1; )); ,'t1a'); ,'t1b'); ,'t1c'); ,'t1d'); ,'t1f'); 右表 t2: DROP TABLE IF ...
- springDataRedis 依赖
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit ...
- 测试demo controllerweb.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://w ...
- Navicat12破解教程
Navicat12破解教程 1.下载Navicat12 并安装,打开Navicat12 点击14天试用,关闭软件 2.下载注册机: 个人百度网盘(版本更新可能不及时):https://pan.baid ...
- BZOJ 4421: [Cerc2015] Digit Division(思路)
传送门 解题思路 差点写树套树...可以发现如果几个数都能被\(m\)整除,那么这几个数拼起来也能被\(m\)整除.同理,如果一个数不能被\(m\)整除,那么它无论如何拆,都无法拆成若干个可以被\(m ...