Java单链表简单实现* @version 1.0
package com.list; /**
* 数据结构与算法Java表示
* @version 1.0
* @author 小明
*
*/
public class MyLinkedList {
private Node head;// 头结点
private int size;// 长度 public MyLinkedList() {
head = null;// 初始化头节点为空
size = 0;// 初始化长度为0
} // 重写toString方法
@Override
public String toString() {
String str = "";
Node temp = head;
for (; temp != null;) {
str += temp.getElement() + " ";
temp = temp.getNext();// 后移之末尾
}
str = "[ " + str + "]";
return str;
} /*
* add方法默认将结点加入到单链表的末尾
*/
public void add(Node node) {
if (head == null) {// 表明此时表为空,不存在头结点
head = node;// 创造头结点
size++;// 长度加一
} else {// 头结点存在
Node temp = head;// 将head赋值给临时变量
while (temp.getNext() != null) {
temp = temp.getNext();// 后移之末尾
}
temp.setNext(node);// 加入节点
size++;// 长度加一
}
} /*
* 插入函数
*/
public void add(int index, Node node) throws IndexException {
Node temp = head;// 将head赋值给临时变量
if (size == 0) {// 当表为空时调用add加入至表头
add(node);
return;
}
if (index <= 0 || index > size + 1) {// 索引位置不正确
throw new IndexException("索引位置不正确!");
} else {
if (index == 1) {// 插入位置为第一个是处理
node.setNext(head);// 将原来的头节点设置为插入节点的后继
head = node;// 头节点更改
size++;// 长度增加
} else {
if (index == size + 1) {// 此时默认插入表尾
add(node);
} else {// 插入既不是表头也不是表尾时
for (int i = 1; i < index - 1; i++) {
head = head.getNext();// 后移至插入位置前一位
}
node.setNext(temp.getNext());// 将temp的后继赋值给插入节点
temp.setNext(node);// 将temp的后继改为插入节点
size++;// 长度增加
}
}
} } /*
* 删除函数
*/
public void remove(int index) throws IndexException {
Node temp = head;// head赋值给temp
if (index <= 0 || index > size) {// 索引位置不正确
throw new IndexException("索引异常");
} else {// 索引正确
if (index == 1) {// 删除第一个元素
head = head.getNext();
size--;//长度减一
} else {
if (index == size) {// 索引正确删除最后一个元素
for (; temp.getNext().getNext() != null;) {// 移至倒数第二个元素
temp = temp.getNext();
}
temp.setNext(null);// 删除最后一个元素
size--;//长度减一
}else {//删除元素不在表头或表尾
for(int i=1;i<index-1;i++) {//后移至删除节点的前一个节点
temp=temp.getNext();
}
temp.setNext(temp.getNext().getNext());//删除
size--;//长度减一
}
}
}
} public static void main(String[] args) throws IndexException {
MyLinkedList list = new MyLinkedList();
list.add(1, new Node<>("asdas"));
list.add(1, new Node<>("202"));
list.add(new Node<>(85));
System.out.println(list);
list.remove(3);
System.out.println(list);
list.add(2,new Node<>(2154));
System.out.println(list);
}
} /*
* 结点
*/
class Node<T> {
private T element;// 值域
private Node next;// 指针域
// 节点初始化只可以设置值域 public Node(T element) {
this.element = element;
next = null;
} // 获取值域
public T getElement() {
return element;
} // 获取指针域
public Node getNext() {
return next;
} public void setNext(Node node) {
next = node;
}
} /*
* 索引异常类
*/
class IndexException extends Exception {
public IndexException() { } public IndexException(String s) {
super(s);
}
}
Java单链表简单实现* @version 1.0的更多相关文章
- Java单链表反转 详细过程
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/guyuealian/article/details/51119499 Java单链表反转 Java实 ...
- java 单链表 练习
练习一下java单链表的简单习题 package com.test1; import java.util.Stack; public class SingleListDemo { /** * 返回单链 ...
- Java运行 Unsupported major.minor version 51.0 错误
今天写了简单的Java程序,运行的时候不知道为啥出现这个问题 happy@happy-HP-Compaq-dx7518-MT:~/Study/CrazyJava$ java FieldTest Exc ...
- Java单链表反转图文详解
Java单链表反转图文详解 最近在回顾链表反转问题中,突然有一些新的发现和收获,特此整理一下,与大家分享 背景回顾 单链表的存储结构如图: 数据域存放数据元素,指针域存放后继结点地址 我们以一条 N1 ...
- java单链表常用操作
总结提高,与君共勉 概述. 数据结构与算法亘古不变的主题,链表也是面试常考的问题,特别是手写代码常常出现,将从以下方面做个小结 [链表个数] [反转链表-循环] [反转链表-递归] [查找链表倒数第K ...
- java 单链表反转
最近与人瞎聊,聊到各大厂的面试题,其中有一个就是用java实现单链表反转.闲来无事,决定就这个问题进行一番尝试. 1.准备链表 准备一个由DataNode组成的单向链表,DataNode如下: pub ...
- JAVA单链表的实现-不带头结点但带有尾指针
1,本程序实现了线性表的链式存储结构.实现的链表带有两个指针,一个始终指向链表中的第一个结点,另一个指针始终指向链表中的最后一个结点. 之所以设置尾指针,是因为,在插入元素到链表中的末尾时,可以通过尾 ...
- JAVA单链表的实现-不带头结点且没有尾指针
本程序采用JAVA语言实现了线性表的链式实现.首先定义了线性表的接口ListInterface,然后LList类实现了ListInterface完成了链表的实现. 本实现中,链表是不带表头结点的,且有 ...
- java单链表代码实现
用惯了C++,java写起来果然不太爽...不废话了,上代码... package javaInnerclassDemo; class Link{ class Node{ private String ...
随机推荐
- 接收上传的multi-file的文件(四)
构建工程 为例创建一个springmvc工程你需要spring-boot-starter-thymeleaf和 spring-boot-starter-web的起步依赖.为例能够上传文件在服务器,你需 ...
- asp企业网站源码部分
ASP的网页文件的格式是.asp,现在常用于各种动态网站中.PHP是一种 HTML 内嵌式的语言,PHP与微软的ASP颇有几分相似,都是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似 ...
- Echarts dataZoom缩放功能参数详解:
dataZoom=[ //区域缩放 { id: 'dataZoomX', show:true, //是否显示 组件.如果设置为 false,不会显示,但是数据过滤的功能还存在. backgroundC ...
- pycuda安装 python<3.0
cd pycudapython ./configure.py –cuda-root=/usr/local/cuda –cudadrv-lib-dir=/usr/lib –boost-inc-dir=/ ...
- Win10系列:UWP界面布局基础5
(2)编写后台代码访问资源 下面通过一个例子来演示如何编写后台代码引用资源.新建一个Windows应用商店的空白应用程序项目,将其命名为AccessResourceApplication,打开项目下的 ...
- learning scala control statement
1 .if satement 与其它语言不同的是,scala if statement 返回的是一个值 scala> val a = if ( 6 > 0 ) 1 else -1a: In ...
- int(a) 和 (int &) a 及 数据存储地址的探究
做题做到一个很有意思的题 void main() { float a = 1; cout << boolalpha << ((int)a == (int &)a); f ...
- css3 前端开发
一.前缀: -moz(例如 -moz-border-radius)用于Firefox -webkit(例如:-webkit-border-radius)用于Safari和Chrome. 二.CSS3圆 ...
- 每天CSS学习之text-align
text-align是CSS的一个属性,其作用是设置文本的对齐方式.其值如下所示: 1.left:文本左对齐.如下所示: div{ text-align:left; } 结果: 2.right:文本右 ...
- 【阿圆实验】Grafana HA高可用方案
一.实现Grafana高可用 1.Grafana实现高可用性有两步: >>使用共享数据库存储仪表板,用户和其他持久数据>>决定如何存储会话数据. 2.Grafana高可用部署图 ...