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. nuxt+高德地图实现多边形区域检索

    我已经放弃百度地图了,为什么呢? 原因一: 百度地图api太乱不容易查阅 原因二: 百度给出的案例太少,可参考项太少 第三点也是最重要的,百度地图花钱,百度地图花钱,百度地图花钱, 很荣幸,作为国内唯 ...

  2. java 多线程 线程安全及非线程安全的集合对象

    一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读取完之后,其他线程才可以使用.防止出现数据不一致或 ...

  3. CentOS7.6系统安装详解(含真机装系统的采坑之旅)!

    刚开始学习linux操作系统是总是很茫然,无所适从,以下是自己总结的工作经验,仅供参考! 一.准备资源 安装前需要准备的资源有linux系统centos7.6发行版系统镜像,vmware workst ...

  4. ASN.1

    ASN.1抽象语法标记(Abstract Syntax Notation One https://baike.baidu.com/item/ASN.1/498523?fr=aladdin

  5. ganglia监控部署

    1.ganglia组件 ganglia 相比于falcon和zabbix主要在于集群的状态集中显示,可以很便捷的对比各主机的性能状态. gmond:相当于是agent端,主要用于收集各node的性能状 ...

  6. Vue学习笔记【27】——Vue路由(设置路由)

    设置路由高亮 css:     .router-link-active, /* vue-router*/    .myactive {      color: red;      font-weigh ...

  7. PHP readdir() 函数

    打开一个目录,读取它的内容,然后关闭: <?php$dir = "/images/"; // Open a directory, and read its contentsi ...

  8. 工程师技术(五):Shell脚本的编写及测试、重定向输出的应用、使用特殊变量、编写一个判断脚本、编写一个批量添加用户脚本

    一.Shell脚本的编写及测 目标: 本例要求两个简单的Shell脚本程序,任务目标如下: 1> 编写一个面世问候 /root/helloworld.sh 脚本,执行后显示出一段话“Hello ...

  9. 在angular项目中使用bootstrap的tooltip插件时,报错Property 'tooltip' does no t exist on type 'JQuery<HTMLElement>的解决方法和过程

    在angular4的项目中需要使用bootstrap的tooltip插件. 1. 使用命令安装jQuery和bootstrap npm install bootstrap jquery --save ...

  10. Struts1.3——文件上传和下载

    1.Struts文件上传 在Web开发中,会经常涉及到文件的上传和下载,比如在注册账户的时候,我们需要上传自己的头像等. 我们可以利用Struts很方便地实现文件的上传. 1.1 开发步骤 现在,假设 ...