单向链表的简单Java实现-sunziren
写在前面,csdn的那篇同名博客就是我写的,我把它现在在这边重新发布,因为我实在不想用csdn了,那边的广告太多了,还有就是那个恶心人的“”按钮,惹不起我躲得起。
最近面试的过程中,发现有的公司的面试题考到了链表的逆序,这一块我正好不是特别清楚。于是打算把链表这一块好好的学习学习。在网上搜寻了众多的资料以后,了解到链表的核心是节点与节点之间的互相链接。
于是自己也写了一个单向链表的类,里面包括input插入方法,inputById按指定下标插入方法,deleteAll删除所有节点方法,deleteById按指定下标删除结点方法,showAll控制台查看所有元素方法,reverse反转当前链表方法,length获取当前链表长度方法,等基本方法。
需要说明的是,这个类还有很多不足之处,它还有很多需要改进的地方。但是基本原理和单向链表是相同的,仅供参考。
1 package demo_4; 2 3 import java.util.Stack; 4 5 public class MyList<Re_Helix> { 6 //节点内部类; 7 private class Node{ 8 private Re_Helix data; //数据; 9 private Node next = null; //下个节点的引用; 10 11 public Node() { //节点的无参构造; 12 super(); 13 } 14 15 public Node(Re_Helix data) { //节点的有参构造; 16 super(); 17 this.data = data; 18 } 19 } 20 21 private Node head; //头部节点; 22 private Node end; //尾部节点; 23 private Node point; //临时节点; 24 private int length; //长度属性; 25 26 public MyList() { //链表的无参构造; 27 head = new Node(); 28 end = head; 29 length = 0; 30 } 31 32 public void input(Re_Helix data) { //给链表插入新值; 33 point = new Node(data); 34 if(length==0) { 35 end.data = point.data; 36 }else { 37 end.next = point; 38 end = point; 39 } 40 length++; 41 } 42 43 public void inputById(int target,Re_Helix data) { //在指定下标的位置插入新值,如果两端超出范围,则分别按照head和end处理; 44 Node temp = new Node(data); 45 if(target>=length) { 46 end.next = temp; 47 end = temp; 48 }else if(target<=0) { 49 temp.next = head; 50 head = temp; 51 }else { 52 temp.next = packPoint(target); 53 packPoint(target-1).next = temp; 54 } 55 length++; 56 } 57 58 public int length() { //返回链表的长度; 59 return length; 60 } 61 62 public Re_Helix getById(int target) { //输入下标返回值; 63 return packPoint(target).data; 64 } 65 66 public void showAll() { //在控制台查看当前链表中的所有数据 67 point = head; 68 int i = 0; 69 while(point!=null) { 70 System.out.println("第"+(i++)+"个:"+point.data); 71 point = point.next; 72 } 73 } 74 75 public void reverse() { //将链表反转; 76 Stack<Node> s1 = new Stack<Node>(); //利用队列的先进先出的特性; 77 point = head; 78 while(point!=null) { 79 s1.push(point); 80 point = point.next; 81 } 82 head = s1.pop(); 83 point = head; 84 while(!s1.isEmpty()) { 85 point.next = s1.pop(); 86 point = point.next; 87 } 88 end = point; 89 end.next = null; //要将逆序后的end位置节点的next置空,不然会造成最后两位的循环; 90 } 91 92 public void deleteById(int target) { //输入下标删除值 93 if(target>0) { 94 packPoint(target-1).next = packPoint(target).next; 95 }else { 96 head = head.next; 97 } 98 length--; 99 } 100 101 public void deleteAll() { //清空链表; 102 length = 0; 103 head.data = null; 104 head.next = null; 105 point = null; 106 end = head; 107 System.gc(); 108 } 109 110 public boolean editById(int target,Re_Helix data) { //修改传入下标位置的值; 111 if(target<0 || target>length) { 112 return false; 113 }else { 114 packPoint(target).data = data; 115 return true; 116 } 117 } 118 119 private Node packPoint(int target) { //内部方法,将指针指向指定下标的节点; 120 if(target<=0) { 121 point = head; 122 }else if(target>=length) { 123 point = end; 124 }else { 125 int i = 0; 126 point = head; 127 while(i++!=target) { 128 point = point.next; 129 } 130 } 131 return point; 132 } 133 }
本文为我的原创文章,转载必须注明链接和我的ID:sunziren,否则就等着被举报吧,尤其是那什么狗屁“金铭鼎”教育。
多有不足,欢迎评论区批评指正。
转载于:https://www.cnblogs.com/sunziren/p/10254481.html
单向链表的简单Java实现-sunziren相关推荐
- java简单单向链表_用java简单的实现单链表的基本操作
packagecom.tyxh.link;//节点类 public classNode {protected Node next; //指针域 protected int data;//数据域 pub ...
- java 单向链表 双向链表_java 单向链表与双向链表的实现
链表 单向链表 单向链表概念 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 这是一种物理结构,不是树那样的逻辑结构.链表和顺序表两种物理结构, ...
- java数组转换成单链表_【转】单向链表(单链表)的Java实现
最近被问到链表,是一个朋友和我讨论Java的时候说的.说实话,我学习编程的近一年时间里,学到的东西还是挺少的.语言是学了Java和C#,关 于Web的学了一点Html+css+javascript.因 ...
- Java实现单向链表基本功能
一.前言 最近在回顾数据结构与算法,有部分的算法题用到了栈的思想,说起栈又不得不说链表了.数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用- 本文主要讲解单链表的基础知识点,做一个简单 ...
- Java实现单向链表——精简
文章目录 引言 实现思路 添加元素 插入元素 删除元素 查找元素 更新元素 显示链表 实现代码(完整) 总结 留言 引言 链表是一种重要的数据结构.它的存储空间是不连续的,单向链表是最简单的一种链表. ...
- java集合单向链表_Java实现单向链表数据结构
本文章同步到本人的博客站点 燕归来 链表是一种数据结构,和数组同级.比如,Java中我们使用的ArrayList,其实现原理是数组.而LinkedList的实现原理就是链表了.链表在进行循环遍历时效率 ...
- Java 单向链表和单向循环链表的代码实现
这个链表,以前上学的时候,学c语言,还是数据结构的时候,学过.也许也实现过吧.下面我就简单记录下这个链表的实现. 单向链表跟单向循环链表的差别就是:单向链表是有结束位的,指向null的时候,就到结尾了 ...
- java实现单向链表
一.单向链表的结构. (1).首先节点的结构,其中包含本节点内容,以及需要指向下一个节点. Java代码 private static class Entry<E>{ E e; Entry ...
- c语言编程切片stl1005无标题,C语言实现简单的单向链表(创建、插入、删除)及等效STL实现代码...
实现个算法,懒得手写链表,于是用C++的forward_list,没有next()方法感觉很不好使,比如一个对单向链表的最简单功能要求: input: 1 2 5 3 4 output: 1-> ...
最新文章
- python视频抽帧 后 前端javascript如何显示_使用OpenCV编写一个可以定时抽帧的脚本...
- 在大厂干了几年开发后,太真实了。
- POJ1125 Floyd
- java层 android_Android开发实践:Java层与Jni层的数组传递
- opencv python教程简书_OpenCV-Python教程:27.图像转换
- 计算机动画整个的发展历史,三维动画的发展史
- OpenLayers3关于Map Export的Canvas跨域
- php多个参数绑定,php – 如何绑定多个参数到MySQLi查询
- java spi使用详解
- Android JNI学习(六)——Java与Native实战演习
- 更改SAP的字段翻译
- 叮~AutoML自动化机器学习入门指南,来了
- C++ list 基础用法合集;list 增减元素 list删除某一个元素 遍历list
- 免费图片文字识别,非常好用
- qpython3怎么运行代码_关于使用qpython和qpython3写程序
- 用计算机和电视机组成家庭影院,如何让我的电脑连上我的家庭影院?
- java计算机毕业设计课堂考勤系统MyBatis+系统+LW文档+源码+调试部署
- 笔记-Codeforces比赛
- 多分类学习(OvO、OVR、MVM 原理区别)
- ZCMU--5123: 分糖果(C语言)