写在前面,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相关推荐

  1. java简单单向链表_用java简单的实现单链表的基本操作

    packagecom.tyxh.link;//节点类 public classNode {protected Node next; //指针域 protected int data;//数据域 pub ...

  2. java 单向链表 双向链表_java 单向链表与双向链表的实现

    链表 单向链表 单向链表概念 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 这是一种物理结构,不是树那样的逻辑结构.链表和顺序表两种物理结构, ...

  3. java数组转换成单链表_【转】单向链表(单链表)的Java实现

    最近被问到链表,是一个朋友和我讨论Java的时候说的.说实话,我学习编程的近一年时间里,学到的东西还是挺少的.语言是学了Java和C#,关 于Web的学了一点Html+css+javascript.因 ...

  4. Java实现单向链表基本功能

    一.前言 最近在回顾数据结构与算法,有部分的算法题用到了栈的思想,说起栈又不得不说链表了.数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用- 本文主要讲解单链表的基础知识点,做一个简单 ...

  5. Java实现单向链表——精简

    文章目录 引言 实现思路 添加元素 插入元素 删除元素 查找元素 更新元素 显示链表 实现代码(完整) 总结 留言 引言 链表是一种重要的数据结构.它的存储空间是不连续的,单向链表是最简单的一种链表. ...

  6. java集合单向链表_Java实现单向链表数据结构

    本文章同步到本人的博客站点 燕归来 链表是一种数据结构,和数组同级.比如,Java中我们使用的ArrayList,其实现原理是数组.而LinkedList的实现原理就是链表了.链表在进行循环遍历时效率 ...

  7. Java 单向链表和单向循环链表的代码实现

    这个链表,以前上学的时候,学c语言,还是数据结构的时候,学过.也许也实现过吧.下面我就简单记录下这个链表的实现. 单向链表跟单向循环链表的差别就是:单向链表是有结束位的,指向null的时候,就到结尾了 ...

  8. java实现单向链表

    一.单向链表的结构. (1).首先节点的结构,其中包含本节点内容,以及需要指向下一个节点. Java代码 private static class Entry<E>{ E e; Entry ...

  9. c语言编程切片stl1005无标题,C语言实现简单的单向链表(创建、插入、删除)及等效STL实现代码...

    实现个算法,懒得手写链表,于是用C++的forward_list,没有next()方法感觉很不好使,比如一个对单向链表的最简单功能要求: input: 1 2 5 3 4 output: 1-> ...

最新文章

  1. python视频抽帧 后 前端javascript如何显示_使用OpenCV编写一个可以定时抽帧的脚本...
  2. 在大厂干了几年开发后,太真实了。
  3. POJ1125 Floyd
  4. java层 android_Android开发实践:Java层与Jni层的数组传递
  5. opencv python教程简书_OpenCV-Python教程:27.图像转换
  6. 计算机动画整个的发展历史,三维动画的发展史
  7. OpenLayers3关于Map Export的Canvas跨域
  8. php多个参数绑定,php – 如何绑定多个参数到MySQLi查询
  9. java spi使用详解
  10. Android JNI学习(六)——Java与Native实战演习
  11. 更改SAP的字段翻译
  12. 叮~AutoML自动化机器学习入门指南,来了
  13. C++ list 基础用法合集;list 增减元素 list删除某一个元素 遍历list
  14. 免费图片文字识别,非常好用
  15. qpython3怎么运行代码_关于使用qpython和qpython3写程序
  16. 用计算机和电视机组成家庭影院,如何让我的电脑连上我的家庭影院?
  17. java计算机毕业设计课堂考勤系统MyBatis+系统+LW文档+源码+调试部署
  18. 笔记-Codeforces比赛
  19. 多分类学习(OvO、OVR、MVM 原理区别)
  20. ZCMU--5123: 分糖果(C语言)

热门文章

  1. requirejs 定义模块中含有prototype
  2. Apache多站点配置
  3. UITableView 长按手势
  4. Flutter 一个电话样式小控件
  5. VS2010与Windows7共舞:对库进行编程
  6. 记录搭建Odoo框架
  7. 六时出行 App 隐私政策
  8. Hihocoder 最近公用祖先三 在线LCA
  9. (TOJ1531)爱的伟大意义
  10. WF工作流设计器(WPF版)