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. [转]图片压缩功能在JBoss AS7出错有关问题

    图片压缩功能在JBoss AS7出错问题近日在为平台(http://www.zyiqibook.com)做些小的整改,途中基本很顺利,但就在后面出现了些纠结的问题,而这问题我之前遇到过,因为一时没有想 ...

  2. Springboot1.5.9整合WebSocket

    一.WebSocket介绍 1.WebSocket是什么? WebSocket是协议,是HTML5开始提供的基于TCP(传输层)的一种新的网络协议, 它实现了浏览器与服务器全双工(full-duple ...

  3. CUDA学习之二:shared_memory使用,矩阵相乘

    CUDA中使用shared_memory可以加速运算,在矩阵乘法中是一个体现. 矩阵C = A * B,正常运算时我们运用 C[i,j] = A[i,:] * B[:,j] 可以计算出结果.但是在CP ...

  4. 启动ABP项目

    1.在官网下载ABP项目 2.打开项目选择解决方案,右击还原NuGet包 3.修改appsettings.json中的ConnectionStrings 例子"ConnectionStrin ...

  5. 简易的Master-Worker框架

    Master-Worker模式是一种使用多线程进行数据处理的结构,多个worker进程协作处理用户请求,master进程负责维护worker进程,并整合最终处理结果 主要参与者 Worker:用于实际 ...

  6. python print 连续输出变量加字符串

    a=1 b=2 print(a,'+',b,'=',a+b) 输出:1+2=3

  7. iOS项目开发中的知识点与问题收集整理②

    1.点击UIButton 无法产生触摸事件    如果在UIImageView中添加了一个按钮,你会发现在默认情况下这个按钮是无法被点击的,需要设置UIImageView的userInteractio ...

  8. cocos2D-X call JNIHelper

    #ifndef _WIN32 JNIEnv *j = JniHelper::getEnv(); if (j == nullptr || j == NULL) {test += "JNIEnv ...

  9. RzPageControl(pagecontrol)

    实现多标签的动态添加,切换,关闭 使用RzPageControl来实现多标签页使用菜单来打开标签页,通过标签页的caption来判断将标签页是否已经被打开过了.1.创建标签页,并判断是否是已经打开过的 ...

  10. uni-app获取元素宽高封装

    getElSize(id) { //得到元素的size return new Promise((res, rej) => { uni.createSelectorQuery().select(' ...