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.minor version 51.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. 四、触发器(Trigger)

    一.触发器 有点类似AOP里的拦截器,触发器不能传递参数,也不能输出参数,也不能显式调用,只有当满足触发器条件的时候Oracle会自动调用. 触发器: 1.语句级别的触发器:CRUD操作 2.行级别的 ...

  2. Vue为v-html中标签添加CSS样式

    在最近的vue项目中遇到的问题:v-html渲染的富文本,无法在样式表中修改样式: <template> <div class="msgHtmlBox" v-ht ...

  3. ActiveMQ异步分发消息

    org.apache.activemq.ActiveMQConnection 类中有个参数: protected boolean dispatchAsync=true; 这个参数的含义到底是什么? 使 ...

  4. China’s movie heroes 《红海行动》展现中国英雄本色

    Recent years have seen a trend for big military movies. Whether it was last year’s British hit Dunki ...

  5. 用socket.io将Node后台与M站相联系

      目的:用socket.io将Node后台与M站相联系,实现当Node后台添加一条数据时,调用该接口的M站不用手动刷新自动出现新增的数据     具体实现:当在后台系统position列表中添加/修 ...

  6. Weka中数据挖掘与机器学习系列之数据格式ARFF和CSV文件格式之间的转换(五)

    不多说,直接上干货! Weka介绍: Weka是一个用Java编写的数据挖掘工具,能够运行在各种平台上.它不仅提供了可以直接用于数据挖掘的软件,还提供了src代码,使用者可以修改源代码,进行二次开发. ...

  7. In-App Purchase iap 内付费 二次验证代码 (java 服务器端)

    参考网址:https://blog.csdn.net/a351945755/article/details/22919533 package com.yichangmao.buyVerify.Comm ...

  8. HTML5 ①

    <!DOCTYPE html> <!--声明当前页面是H5--> html框架: <html> <head lang="en"> & ...

  9. day044 cssy其他样式 js初识

    float: 浮动 .t1{ float: right/left; } 关于浮动的两个特点: 1.浮动的框可以向左或向右移动,知道他的外边缘碰到包括框或另一个浮动框的边框为止. 2.由于浮动框不在文档 ...

  10. flask项目结构(五)使用数据库

    简介: 基础搭建好了,开始读写数据库吧.毕竟写的程序,也没什么高深的,就是CRUD,中文说是增删改查. 一:在数据库中增加测试数据. 在项目根目录建立init_test.py from config ...