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. SHOW - 显示运行时参数的数值

    SYNOPSIS SHOW name SHOW ALL DESCRIPTION 描述 SHOW 将显示当前运行时参数的数值. 这些变量可以通过 SET 语句来设置,或者通过编辑 postgresql. ...

  2. 2019年React学习路线图

    作者|javinpaul 译者|无明 之前我们已经介绍了 2019 年 Vue 学习路线图,而 React 作为当前应用最广泛的前端框架,在 Facebook 的支持下,近年来实现了飞越式的发展,我们 ...

  3. 转 HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解

    HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth到底指的哪到哪的距离之完全详解 scrollHeight: 获取对象的滚动高度. scrollLe ...

  4. Spring框架-经典的案例和demo,一些可以直接用于生产,使用atomikos来处理多数据源的一致性事务等

    Spring Examples Demo website:http://www.ityouknow.com/ 对Spring框架的学习,包括一些经典的案例和demo,一些可以直接用于生产. sprin ...

  5. mysql性能查看 命中率 慢查询

    网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的情况进行配置优化,好的做法是MySQL服务器稳定运行了一 ...

  6. 解析crontab php自动运行的方法

    crontab是linux自带的一个命令 使php自动运行的方法php自动运行有很多方法,这里分以下DZ以及一些通过系统完成的方法和直接触发运行驻留系统的方法.Discuz后台有个计划任务,可以使ph ...

  7. linux 日志文件查看

    记录下日志中常用的日志查看命令. 1.  tail -n 10 -f  **.log 显示日志文件尾部10行日志,当有新日志产生,会追加显示. 2. tail 命令 现ff.sh中有如下信息: [ro ...

  8. 如何理解c和c++的复杂类型声明

    曾经碰到过让你迷惑不解.类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明. 我们将从每天都能碰到的较简单 ...

  9. nginx logformat说明

    记录一下nginx logformat的相关说明 log_format格式变量:$remote_addr  #记录访问网站的客户端地址$remote_user  #远程客户端用户名$time_loca ...

  10. 高博SLAM14讲 ch5 点云拼接例程实现与bug处理

    一.环境配置,基本库的安装 1.Eigen库 apt-get 安装 2.sophus库 apt-get 安装 3.pcl 点云库 (1)官方预编译版本 sudo apt-get install lib ...