【Java数据结构】链表的增、删、返回指定位置元素(添加泛型)
修改变量名称的小技巧
想要修改多个相同的变量名称,选中想要改名的变量,按alt+shift+R
重构,可以一次更改多个相同变量名称
代码
Node.java
package cn.hanquan.test;public class Node
{Node pre;Node next;Object element;// 构造器public Node(Node pre, Node next, Object element){super();this.pre = pre;this.next = next;this.element = element;}public Node(Object obj){this.element = obj;}public Node(){}
}
MyLinkList.java
package cn.hanquan.test;//一个链表类
public class MyLinkList<E> // 泛型
{private Node first;private Node last;public int size;// 增public void add(E element)// 选中想要改名的变量 按alt+shift+R重构 可以一次更改所有相同变量名称{Node node = new Node(element);if (first == null)// 空{node.pre = null;node.next = null;first = node;last = node;}else// 非空{node.pre = last;node.next = null;last.next = node;last = node;}size++;}// 顺序打印public String toString(){StringBuilder ret = new StringBuilder("[");Node cur = new Node();cur = first;if (cur == null)ret.append("]");// 链表为空while (cur != null){ret.append(cur.element.toString());if (cur.next != null)ret.append(", ");elseret.append("]");cur = cur.next;}return ret.toString();}// 逆序打印public String toStringBack(){StringBuilder ret = new StringBuilder("[");Node cur = new Node();cur = last;if (cur == null)ret.append("]");// 链表为空while (cur != null){ret.append(cur.element.toString());if (cur.pre != null)ret.append(", ");elseret.append("]");cur = cur.pre;}return ret.toString();}// 找位置public Node findCur(int index){Node cur = new Node();cur = null;if (index > size && size != 0 || index < 0){System.out.println("索引数字不合法:" + index + "/" + size);}else// 顺序查找{cur = first;for (int i = 0; i < index; i++){cur = cur.next;}}return cur;}// 返回index位置元素public E get(int index){Node cur = findCur(index);return cur == null ? null : (E) cur.element;}// 删public void remove(int index){// 找位置Node cur = new Node();cur = findCur(index);if (first == null)// 链表为空{System.out.println("链表为空,无法删除~");}else if (first == last)// 只有一个节点{last = first = null;}else if (cur == first) // 删除头节点{first = cur.next; // 新的头节点指向新的头cur.next.pre = null; // 新的头前驱为null}else if (cur == last) // 删除尾节点{last = cur.pre;// 新的尾节点指向新的尾cur.pre.next = null;// 新的尾后继为null}else // 删除中间节点{cur.pre.next = cur.next;cur.next.pre = cur.pre;}size--;}// 指定位置插入public void add(int index, E element){// 找位置Node cur = new Node();cur = findCur(index);// 插入Node node = new Node(element);if (first == null)// 空{node.pre = null;node.next = null;first = node;last = node;}else if (cur == first)// 头{node.pre = null;node.next = first;first.pre = node;first = node;}else if (cur == last)// 尾{node.next = null;node.pre = last;last.next = node;last = node;}else // 中{cur.pre.next = node;node.pre = cur.pre;node.next = cur;cur.pre = node;}size++;}
}
Main.java
package cn.hanquan.test;public class Main
{public static void main(String[] args){MyLinkList<String> myLinkList = new MyLinkList<String>();// 增加了泛型的链表for (int i = 0; i < 20; i++){myLinkList.add("节点" + i);}/*----------------------------------以下全部用于测试----------------------------------*/// 获取元素并打印System.out.println(myLinkList.toString());for (int i = 0; i + 5 < myLinkList.size; i += 5){System.out.println("位置为" + i + "的元素是" + myLinkList.get(i));}// 删除元素for (int i = 0; i < 8; i++){System.out.println("删除前:" + myLinkList.toString());myLinkList.remove(0);System.out.println("删除后:" + myLinkList.toString() + "\n");System.out.println("逆序:" + myLinkList.toStringBack() + "\n");}// 插入元素myLinkList.add(5, "插" + 5);System.out.println("插入位置" + 5 + myLinkList.toString() + "\n");System.out.println("逆序:" + myLinkList.toStringBack() + "\n");/*----------------------------------以上全部用于测试----------------------------------*/}
}
运行结果
[节点0, 节点1, 节点2, 节点3, 节点4, 节点5, 节点6, 节点7, 节点8, 节点9, 节点10, 节点11, 节点12, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]
位置为0的元素是节点0
位置为5的元素是节点5
位置为10的元素是节点10
删除前:[节点0, 节点1, 节点2, 节点3, 节点4, 节点5, 节点6, 节点7, 节点8, 节点9, 节点10, 节点11, 节点12, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]
删除后:[节点1, 节点2, 节点3, 节点4, 节点5, 节点6, 节点7, 节点8, 节点9, 节点10, 节点11, 节点12, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]逆序:[节点19, 节点18, 节点17, 节点16, 节点15, 节点14, 节点13, 节点12, 节点11, 节点10, 节点9, 节点8, 节点7, 节点6, 节点5, 节点4, 节点3, 节点2, 节点1]删除前:[节点1, 节点2, 节点3, 节点4, 节点5, 节点6, 节点7, 节点8, 节点9, 节点10, 节点11, 节点12, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]
删除后:[节点2, 节点3, 节点4, 节点5, 节点6, 节点7, 节点8, 节点9, 节点10, 节点11, 节点12, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]逆序:[节点19, 节点18, 节点17, 节点16, 节点15, 节点14, 节点13, 节点12, 节点11, 节点10, 节点9, 节点8, 节点7, 节点6, 节点5, 节点4, 节点3, 节点2]删除前:[节点2, 节点3, 节点4, 节点5, 节点6, 节点7, 节点8, 节点9, 节点10, 节点11, 节点12, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]
删除后:[节点3, 节点4, 节点5, 节点6, 节点7, 节点8, 节点9, 节点10, 节点11, 节点12, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]逆序:[节点19, 节点18, 节点17, 节点16, 节点15, 节点14, 节点13, 节点12, 节点11, 节点10, 节点9, 节点8, 节点7, 节点6, 节点5, 节点4, 节点3]删除前:[节点3, 节点4, 节点5, 节点6, 节点7, 节点8, 节点9, 节点10, 节点11, 节点12, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]
删除后:[节点4, 节点5, 节点6, 节点7, 节点8, 节点9, 节点10, 节点11, 节点12, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]逆序:[节点19, 节点18, 节点17, 节点16, 节点15, 节点14, 节点13, 节点12, 节点11, 节点10, 节点9, 节点8, 节点7, 节点6, 节点5, 节点4]删除前:[节点4, 节点5, 节点6, 节点7, 节点8, 节点9, 节点10, 节点11, 节点12, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]
删除后:[节点5, 节点6, 节点7, 节点8, 节点9, 节点10, 节点11, 节点12, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]逆序:[节点19, 节点18, 节点17, 节点16, 节点15, 节点14, 节点13, 节点12, 节点11, 节点10, 节点9, 节点8, 节点7, 节点6, 节点5]删除前:[节点5, 节点6, 节点7, 节点8, 节点9, 节点10, 节点11, 节点12, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]
删除后:[节点6, 节点7, 节点8, 节点9, 节点10, 节点11, 节点12, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]逆序:[节点19, 节点18, 节点17, 节点16, 节点15, 节点14, 节点13, 节点12, 节点11, 节点10, 节点9, 节点8, 节点7, 节点6]删除前:[节点6, 节点7, 节点8, 节点9, 节点10, 节点11, 节点12, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]
删除后:[节点7, 节点8, 节点9, 节点10, 节点11, 节点12, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]逆序:[节点19, 节点18, 节点17, 节点16, 节点15, 节点14, 节点13, 节点12, 节点11, 节点10, 节点9, 节点8, 节点7]删除前:[节点7, 节点8, 节点9, 节点10, 节点11, 节点12, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]
删除后:[节点8, 节点9, 节点10, 节点11, 节点12, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]逆序:[节点19, 节点18, 节点17, 节点16, 节点15, 节点14, 节点13, 节点12, 节点11, 节点10, 节点9, 节点8]插入位置5[节点8, 节点9, 节点10, 节点11, 节点12, 插5, 节点13, 节点14, 节点15, 节点16, 节点17, 节点18, 节点19]逆序:[节点19, 节点18, 节点17, 节点16, 节点15, 节点14, 节点13, 插5, 节点12, 节点11, 节点10, 节点9, 节点8]
【Java数据结构】链表的增、删、返回指定位置元素(添加泛型)相关推荐
- Java数据结构链表面试题 作者:哇塞大嘴好帥(哇塞大嘴好帅) --持续更新
作者:哇塞大嘴好帥(哇塞大嘴好帅) Java数据结构链表面试题 4.1.查询链表有效数据个数 //判断有效数据个数 public int validDate(){//创建临时变量NodeDate no ...
- 猴子选大王 java_基于java数据结构链表写的猴子选大王
[实例简介] 基于java数据结构链表写的猴子选大王,其实就是一个约瑟夫环问题,采用java数据结构链表写的.有点小问题.当输入一只猴子,报数为1时删除会出错.没有实现动态显示猴子的添加和删除. [实 ...
- 【字符串操作之】返回指定位置的字符和Unicode 字符代码 根据unicode返回字符→→charAt、charCodeAt和fromCharCode...
//charAt和charCodeAt分别返回指定位置处的字符和字符对应的unicode码 var str:String="abcdefg"; var str2=str.charA ...
- JS之返回指定位置字符的charAt方法
作用:charAt() 方法可返回指定位置的字符,返回的字符是长度为 1 的字符串 语法:stringObject.charAt(index) 参数:必需.表示字符串中某个位置的数字,即字符在字符串中 ...
- 顺序表-顺序表的基本操作(初始化+指定位置元素值 + 用元素值求下标)
顺序表的存储结构: typedef struct{int data[Maxsize]; //存在顺序表中的元素int length; //存放顺序表的长度}SqList; 一.初始化顺序表算法: vo ...
- C语言练习7—一维数组删除指定位置元素
题目 在一维数组删除指定位置元素,现定义第一个元素位置为1,一维数组元素个数不确定,需要动态输入,并返回删除元素后的数组以及被删除的元素. 例如输入数组个数为n = 4:将要删除的数组元素位置是2: ...
- java单链表 提供增删改查_java实现单链表增删改查的实例代码详解
package 数据结构算法.链表; /* *定义节点 * 链表由节点构成 */ public class node { private e e; //数据data private node next ...
- java数据结构-链表详解
文章目录 1.数据结构-链表详解 1.1单链表 1.1.1单链表节点的尾部添加 1.1.2单链表节点的自动排序添加 1.1.3单链表节点的修改 1.1.4单链表节点的删除 1.2单链表面试题 1.2. ...
- 【Java数据结构[链表--单向链表]】
单向链表 链表是以节点的方式来存储的,是链式存储 每个节点包含一个数据域用来保存当前节点的数据,一个next域用于指向下一个节点 单链表结构示意图: 单链表内存示意图: 代码实现: //链表 clas ...
最新文章
- ensp 路由表_华为模拟器ensp——静态路由实验
- sql server两种分页方法
- c语言eof_C语言 技能提升 系列文章(十)错误处理
- spring boot+mybatis 多数据源切换
- 抖音python广告_抖音上好看的小姐姐,Python给你都下载了
- 小程序获取StorageSync时候的坑
- python打开.data_DataX初体验-python命令启动以及纯java启动
- 实例变量和局部变量区别
- nodejs的req取参req.body,req.params,req.query
- UnityShader5:基本内置变量
- gdal库读取tif影像坐标
- h3c Telnet配置实验
- 为什么计算机安装不了程序,小U讲解电脑为什么安装不了软件
- 网易邮箱服务器怎么注册,免费网易域名邮箱申请教程(图)
- 云时代的“双态IT”运维思路
- 计算机怎么安错误,电脑安装软件时提示安装过程出错系统设置未被修改怎么办...
- 甲骨文公司总裁Larry Ellison在耶鲁大学的演讲
- 购物网站的商品推荐算法有哪些?
- 计算机房电源引入方式,(完整版)通信机房电源计算公式.pdf
- win10无法安装提示磁盘布局不受UEFI固件支持的解决方法
热门文章
- java定时增量同步,一种可配置的定时数据同步方法与流程
- NVIDIA AGX Xavier环境配置
- Web开发-Django模型层
- amd处理器更新zen4服务器芯片,AMD更新CPU、GPU路线图:Zen4架构与硬件光追可期
- 【数据结构】哈夫曼树与哈夫曼编码
- NYOJ516(优化)
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之七 - 深入解析gtest
- 趣谈设计模式 | 适配器模式(Adapter):如何让现存对象适用于新的环境?
- Linux网络编程 | 并发模式:半同步/半异步模式、领导者/追随者模式
- 用Python实现冒泡排序