Java单链表简单实现* @version 1.0

时间:2023-01-10 08:49:39
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的更多相关文章

  1. Java单链表反转 详细过程

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/guyuealian/article/details/51119499 Java单链表反转 Java实 ...

  2. java 单链表 练习

    练习一下java单链表的简单习题 package com.test1; import java.util.Stack; public class SingleListDemo { /** * 返回单链 ...

  3. Java运行 Unsupported major&period;minor version 51&period;0 错误

    今天写了简单的Java程序,运行的时候不知道为啥出现这个问题 happy@happy-HP-Compaq-dx7518-MT:~/Study/CrazyJava$ java FieldTest Exc ...

  4. Java单链表反转图文详解

    Java单链表反转图文详解 最近在回顾链表反转问题中,突然有一些新的发现和收获,特此整理一下,与大家分享 背景回顾 单链表的存储结构如图: 数据域存放数据元素,指针域存放后继结点地址 我们以一条 N1 ...

  5. java单链表常用操作

    总结提高,与君共勉 概述. 数据结构与算法亘古不变的主题,链表也是面试常考的问题,特别是手写代码常常出现,将从以下方面做个小结 [链表个数] [反转链表-循环] [反转链表-递归] [查找链表倒数第K ...

  6. java 单链表反转

    最近与人瞎聊,聊到各大厂的面试题,其中有一个就是用java实现单链表反转.闲来无事,决定就这个问题进行一番尝试. 1.准备链表 准备一个由DataNode组成的单向链表,DataNode如下: pub ...

  7. JAVA单链表的实现-不带头结点但带有尾指针

    1,本程序实现了线性表的链式存储结构.实现的链表带有两个指针,一个始终指向链表中的第一个结点,另一个指针始终指向链表中的最后一个结点. 之所以设置尾指针,是因为,在插入元素到链表中的末尾时,可以通过尾 ...

  8. JAVA单链表的实现-不带头结点且没有尾指针

    本程序采用JAVA语言实现了线性表的链式实现.首先定义了线性表的接口ListInterface,然后LList类实现了ListInterface完成了链表的实现. 本实现中,链表是不带表头结点的,且有 ...

  9. java单链表代码实现

    用惯了C++,java写起来果然不太爽...不废话了,上代码... package javaInnerclassDemo; class Link{ class Node{ private String ...

随机推荐

  1. Python 5 —— OOP

    OOP class MyClass: y = None def __init__(self,x,y): self.__x = x self.y = y def getx(self): return s ...

  2. linux下为php添加mongodb扩展

    基于本博客yum安装的lamp环境,phpize 位于 /usr/bin,php-config 位于/usr/bin,php.ini 位于/etc/ 1.首先从http://pecl.php.net/ ...

  3. Eclipse Code Templates设置

    从工作开始,经历了几个项目的开发,现在的项目一般都是一个团队共同开发,而每个人都有自己的编码习惯,为了统一格式,项目组在项目开发之前都会制定一系列的规范.俗话说约定优于配置,但是在执行过程中往往发现效 ...

  4. GS1011无线模块的使用简介。

    一.硬件说明: 只是用电脑的串口助手与之通信,利用了max232进行电平转换.是用模块的UART0作为通信接口. 模块引脚 接点 说明   1.17.32.48 GND 模块地   9 3.3V VB ...

  5. 关于java的上转型对象

    1. 定义 如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,如: A a;a = new B();ORA a;B b = new B();a = b; 则称A类 ...

  6. Unity 3D Framework Designing&lpar;3&rpar;——构建View和ViewModel的生命周期

    > 对于一个View而言,本质上是一个MonoBehaviour.它本身就具备生命周期这个概念,比如,Awake,Start,Update,OnDestory等.这些是非常好的方法,可以让开发者 ...

  7. zookeeper学习总结

    最近一两天,一直在看zookeeper,自己也感觉头昏脑涨的. 现记录一下,最近的所得: 安装与配置: http://blog.csdn.net/morning99/article/details/4 ...

  8. K2签约龙光地产,为集团实现&OpenCurlyDoubleQuote;千亿目标”保驾护航

    随着房地产行业步入成熟期,行业整合及转型速度变快,房企要在数字经济的背景下实现稳步发展,企业信息化建设是其中的重要一环.此次龙光地产选择与K2携手,用统一流程平台为集团保驾护航,向实现千亿目标迈进. ...

  9. 关于正餐智能POS6&period;0&period;1&period;1改版后,点击反结账进入点菜界面后无法进行加菜的FAQ

    适用版本:智能POS正餐V6.0.1.1+适用情况:点击反结账进入点菜界面后无法进行加菜.原因:为让报表统计的数据更准确解决方案:1.点击反结账,输入用户密码,进入点菜界面. 2.点击结算,进入收银台 ...

  10. hadoop day 5

    1.Zookeeper Zookeeper的安装和配置(集群模式) 1)在conf目录下创建一个配置文件zoo.cfg, tickTime=2000——心跳检测的时间间隔(ms) dataDir=/U ...