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 简单链表实现的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. 栈和队列的java简单实现

    今天看了一本书<啊哈 算法>,书的内容不多,一共两章,第一章是常见的排序算法包括桶排序.冒泡排序和快速排序,这些事基础的排序算法网上有很多资料说明,这里主要说第二章栈,对列,链表,书上使用 ...

  3. 2018-2019-20172329 《Java软件结构与数据结构》第二周学习总结

    2018-2019-20172329 <Java软件结构与数据结构>第二周学习总结 教材学习内容总结 <Java软件结构与数据结构>第三章 集合概述--栈 一.集合 1.我们印 ...

  4. 读书笔记:《数据结构与算法分析Java语言描述》

    目录 第 3 章 表.栈和队列 3.2 表 ADT 3.2.1 表的简单数组实现 3.2.2 简单链表 3.3 Java Collections API 中的表 3.3.1 Collection 接口 ...

  5. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  6. Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

  7. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

  8. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  9. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

随机推荐

  1. HTML 使用CSS 如何去掉文本聚焦框 HTML 使用CSS 如何去掉文本聚焦框 : outline 值设为none 修改input、textarea输入框placeholder样式

    HTML 使用CSS 如何去掉文本聚焦框 : outline 值设为none 修改input.textarea输入框placeholder样式  兼容性代码: input::-webkit-input ...

  2. 使用while循环实现菜单

  3. IO,文件

    IO 1. 定义 >在内存中存在数据交换的操作认为是IO操作,比如和终端交互 ,和磁盘交互,和网络交互等 2. 程序分类 >* IO密集型程序:在程序执行中有大量IO操作,而cpu运算较少 ...

  4. python安装pika模块rabbitmq

    1.pip install pika 2.如找不到 拷贝 D:\python\testmq\venv\Lib\site-packages  \pika目录

  5. 力扣 ——3Sum python (三数之和)实现

    题目描述: 中文: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 英文: Give ...

  6. Java高频经典面试题(第一季)五:递归与迭代

    编程题:  有n步台阶, 一次只能上 1步 或 2步, 共有多少种走法? 递归 循环迭代 递归: package will01; import org.junit.Test; public class ...

  7. 容器和Docker

    一.容器 1.虚拟机和容器的区别 (1)为什么要用docker 服务器端开发/部署: 实现更轻量级的虚拟化,方便快速部署, 对于部署来说可以极大的减少部署的时间成本和人力成本 Docker支持将应用打 ...

  8. python读取配置文件(ini、yaml、xml)

    python读取配置文件(ini.yaml.xml)  

  9. Vue.js(七)

    ES6 默认导出(只能一次)与默认导入 默认导出: // 当前文件模块为 test.js // 定义私有成员 a 和 c let a = 10 let c = 20 // 外界访问不到变量 d ,因为 ...

  10. rocketmq单点部署

    下载地址:https://github.com/alibaba/RocketMQ 转载请注明来源:http://blog.csdn.net/loongshawn/article/details/510 ...